2010-12-01 5 views
1
hidValue="javaScript:java"; 
replaceStr = "java"; 
resultStr=hidValue.replace("/\b"+replaceStr+"\b/gi",""); 

resultStr contient encore "javaScript: java"remplacer exacte de chaîne en Javascript

Le code ci-dessus ne remplace pas la java chaîne exacte. Mais quand je change le code et passe directement la valeur « java », il est maintenant remplacé correctement ie

hidValue="javaScript:java"; 
resultStr=hidValue.replace(/\bjava\b/gi,""); 

resultStr contient « javaScript: »

Alors, comment dois-je passer une variable à remplacer la fonction telle que seule la la correspondance exacte est remplacée.

Répondre

3

La fonction remplacer ne prend pas une chaîne en premier argument mais un objet RegExp. Vous ne pouvez pas mélanger les deux. Pour créer un RexExp objet sur une chaîne combinée, utilisez le constructeur approprié:

resultStr=hidValue.replace(new RegExp("\\b"+replaceStr+"\\b","gi"),""); 

Notez la double barre oblique inversée: Vous voulez une barre oblique inverse dans votre expression régulière, mais une barre oblique inverse sert également de caractère d'échappement dans la chaîne, donc vous devrez le doubler.

3

Notez que dans un cas vous passez une expression littérale régulière /\bjava\b/gi et dans l'autre vous passez une chaîne "/\bjava\b/gi". Lorsque vous utilisez une chaîne comme modèle, String.replace recherchera cette chaîne , elle ne traitera pas le modèle comme une expression régulière.

Si vous devez faire une expression régulière en utilisant des variables, le faire comme si:

new RegExp("\\b" + replaceStr + "\\b", "gi") 

Voir:

https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/RegExp
https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/String/replace