2010-07-20 24 views
55

¿Es posible en JavaScript hacer algo como preg_match en PHP?preg_match en JavaScript?

Me gustaría ser capaz de obtener dos números de secuencia:

var text = 'price[5][68]'; 

en dos variables separadas:

var productId = 5; 
var shopId = 68; 

Editar: también uso MooTools si ayudaría.

Respuesta

85

JavaScript tiene un objeto RegExp que hace lo que quiere. El objeto String tiene una función match() que te ayudará.

var matches = text.match(/price\[(\d+)\]\[(\d+)\]/); 
+26

Para otros googlers; 'text.match' devolverá el resultado de la coincidencia. entonces 'var match = text.match (/ price \ [(\ d +) \] \ [(\ d +) \] /)' y luego 'alert (match [1]);' – Maurice

26
var text = 'price[5][68]'; 
var regex = /price\[(\d+)\]\[(\d+)\]/gi; 
match = regex.exec(text); 

coincidencia [1] y coincidencia [2] contendrán los números que está buscando.

5

Esto debería funcionar:

var matches = text.match(/\[(\d+)\][(\d+)\]/); 
var productId = matches[1]; 
var shopId = matches[2]; 
4
var myregexp = /\[(\d+)\]\[(\d+)\]/; 
var match = myregexp.exec(text); 
if (match != null) { 
    var productId = match[1]; 
    var shopId = match[2]; 
} else { 
    // no match 
} 
13
var thisRegex = new RegExp('\[(\d+)\]\[(\d+)\]'); 

if(!thisRegex.test(text)){ 
    alert('fail'); 
} 

he encontrado prueba para actuar de manera más preg_match, ya que proporciona un retorno de Boole. Sin embargo, debe declarar una var. RegExp.

CONSEJO: RegExp agrega que es propio/al principio y al final, así que no los pase.

+6

También puede acortar esto con '/\ [(\ d +) \] \ [(\ d +) \] /. test (text) ' – FlabbyRabbit

+0

Estoy de acuerdo, ya que estaba buscando cómo reproducir la función de prueba de expresiones regulares de preg_match cuando vi el título de esta pregunta ;) – flu

+0

El uso del constructor de la clase RegExp tiene la ventaja de que si necesita interpolar una variable en el patrón, ¡se necesita una cadena! –

Cuestiones relacionadas