2010-07-02 7 views
0

J'essaie d'utiliser des expressions régulières javascript pour faire des correspondances et j'ai trouvé un comportement vraiment inhabituel que j'espérais que quelqu'un pourrait expliquer.javascript d expression normale comportement inattendu

La chaîne que je tentais de match était: "0 (IR)" et le bloc de code était

finalRegEx = new RegExp("[0-9]"); 
match = finalRegEx.exec(str); 

sauf que quand je mets "\ d" au lieu de "[0-9]" il n'a pas trouvé de correspondance. Je suis vraiment confus par ça.

Répondre

4

Si vous utilisez RegExp avec "\d" pour construire l'expression régulière, l'"\d" se traduira en un peu "d". Soit utiliser deux barres obliques arrière pour échapper à la barre comme "\\d" ou simplement utiliser le regular expression literals /…/ à la place:

match = /\d/.exec(str) 
3

Vous devez échapper parce que vous utilisez le constructeur, sinon il correspond d littéralement:

new RegExp('\\d').test('1') 

new RegExp ne doit être utilisé pour la correspondance dynamique. Sinon, utilisez un littéral:

var foo = /\d/; 
foo.test(1) 
+0

ce que vous entendez par correspondance dynamique? correspondant au contenu d'une variable? – lincolnk

+0

créer dynamiquement l'expression rationnelle au lieu de le coder en dur, comme dans une boucle, en créant un nouvel objet RegExp par variable changeante. –

0

Vous avez probablement besoin d'échapper à la barre oblique inverse: finalRegEx = new RegExp("\\d");

Questions connexes