2008-09-18 9 views
1

J'essaie de faire correspondre des éléments avec un nom qui est 'container1$container2$chkChecked', en utilisant une expression rationnelle de '.+\$chkChecked', mais je ne reçois pas les correspondances que je attends quand le nom de l'élément est comme décrit. Qu'est-ce que je fais mal?JavaScript RegEx Elements Match

+0

Alors qu'est-ce que vous attendez et qu'obtenez-vous? – Sietse

Répondre

3

Je pense, par votre utilisation de citations, est que vous avez fait quelque chose comme

re = new RegExp('.+\$chkChecked'); 

qui ne fonctionnera pas parce que js profite de la \ dans son interprétation de chaîne comme une évasion il ne fait jamais dans l'interprète regex

à la place que vous voulez

re = new RegExp('.+\\$chkChecked'); 
3

essayer

string.match(/[$]chkChecked$/) 

alternativement, vous pouvez essayer

string.match(/[^a-zA-Z0-9]chkChecked/) 

(Aussi, assurez-vous que votre utilisation de // autour de votre regex, sinon vous pourriez être correspondant en utilisant des chaînes littérales. Tho Pas évident sans extrait de code plus grand)

0

Steven Noble:

qui ne fonctionnera pas, car js profite de la \ dans son interprétation de chaîne comme une évasion il ne fait jamais dans l'interpréteur regex

je comptais utiliser \ comme une évasion parce que je cherche vraiment un $ dans le nom de l'élément.

2

Il existe deux niveaux d'échappement: l'un lorsque votre code est analysé en premier (par exemple, si vous souhaitez inclure un 'à l'intérieur de la chaîne) et l'autre dans le moteur d'expression rationnelle. Vous avez donc besoin de deux \ s avant le $ pour que le moteur de regexp ne le traite pas comme un caractère spécial.