Regex breekt

Status
Niet open voor verdere reacties.

bn2vs

Terugkerende gebruiker
Lid geworden
18 aug 2007
Berichten
1.705
Ik heb een custom jQuery replace functie die als argumenten een regex en een andere funcie heeft. De regex maak ik met een variabele (string) erin. Als er speciale chars in deze string staan, dan breekt de regex.

[JS]new RegExp( "\\b" + words + "\\b", "g" ),[/JS]

Hoe kan ik iets dergelijk escapen?
 
Wat bedoel je met 'speciale characters'? HTML entities (eg. &)?


:thumb:
 
Nee, "regex characters", bv . en ?
 
Dit is mijn regex:

[JS]new RegExp( "\\b" + RegExp.escape( words ) + "\\b", "g" )[/JS]

De escape funcie die ik gebruik is zo gedefineerd:

[JS]RegExp.escape = function(text) {
if (!arguments.callee.sRE) {
var specials = [ '/', '.', '*', '+', '?', '|', '(', ')', '[', ']', '{', '}', '\\' ];
arguments.callee.sRE = new RegExp( '(\\' + specials.join('|\\') + ')', 'g' );
}
return text.replace(arguments.callee.sRE, '\\$1');
}[/JS]

Als ik een dergelijke alert doe...

[JS]alert( RegExp.escape( words ) );[/JS]

...worden regex chars voorafgegaan door een enkele \, wat het correcte gedrag is voor zover ik het versta. De regex matched de stuff die zou moeten matchen echter niet (tenzij er geen regex chars in words zitten).

Iets verkeer aan de escape functie of aan hoe ik de regex maak?
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan