JavaScript: usar variable en la coincidencia de cadenas


89

Encontré varias preguntas similares, pero no me ayudó. Entonces tengo este problema:

var xxx = "victoria";
var yyy = "i";
alert(xxx.match(yyy/g).length);

No sé cómo pasar la variable en el comando de coincidencia. Por favor ayuda. Gracias.



Una cosa más: si está utilizando una variable para construir una expresión regular, se debe tener cuidado de que la variable pueda contener caracteres especiales de expresión regular. por ejemplo, si pasa "c ++", el compilador de SyntaxError: Invalid regular expression: /c++/: Nothing to repeat
expresiones

Respuestas:


187

Aunque la función de coincidencia no acepta literales de cadena como patrones de expresiones regulares, puede usar el constructor del objeto RegExp y pasarlo a la función String.match:

var re = new RegExp(yyy, 'g');
xxx.match(re);

Cualquier indicador que necesite (como / g) puede ir al segundo parámetro.


2
+1, esta es la forma preferida, por cierto, si el argumento pasado al matchmétodo no es un RegExpobjeto, internamente el RegExpconstructor será invocado usando ese valor, por lo que puede usar un patrón de cadena , por ejemplo:"a123".match("\\d+")[0] === "123";
Christian C. Salvadó


9

Por ejemplo:

let myString = "Hello World"
let myMatch = myString.match(/H.*/)
console.log(myMatch)

O

let myString = "Hello World"
let myVariable = "H"
let myReg = new RegExp(myVariable + ".*")
let myMatch = myString.match(myReg)
console.log(myMatch)

6

Ejemplo. Para encontrar el número de vocales dentro de la cadena

var word='Web Development Tutorial';
var vowels='[aeiou]'; 
var re = new RegExp(vowels, 'gi');
var arr = word.match(re);
document.write(arr.length);

0

para mí de todos modos, ayuda verlo usado. acabo de hacer esto usando el ejemplo "re":

var analyte_data = 'sample-'+sample_id;
var storage_keys = $.jStorage.index();
var re = new RegExp( analyte_data,'g');  
for(i=0;i<storage_keys.length;i++) { 
    if(storage_keys[i].match(re)) {
        console.log(storage_keys[i]);
        var partnum = storage_keys[i].split('-')[2];
    }
}

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.