2009-02-04 98 views
2

在下面的代碼中。我希望是真的,但我卻變得錯誤。我錯過了什麼?Javascript正則表達式對象和美元符號

var text = "Sentence $confirmationlink$ fooo";  
alert(placeHolderExists(text,'confirmationlink'); // alerts false 
function placeHolderExists(text,placeholdername) { 
    var pattern = new RegExp('\$'+placeholdername+'\$');  
    return pattern.test(text); 
} 

回答

9

構建字符串時,RegExp表達式構建器中的「\」被視爲轉義字符,就像它在實際的RegExp中一樣。您需要逃脫兩次,請嘗試:

new RegExp('\\$'+placeholdername+'\\$'); 
+0

我應該說爲什麼 – meouw 2009-02-04 17:28:31

+0

爲什麼使用正則表達式如果所有的塞爾吉奧需要驗證匹配是否存在?如果塞爾吉奧想要匹配值,那麼應該使用正則表達式,但只是驗證匹配,然後IndexOf會更有效,更簡單......不是嗎? – Dscoduc 2009-02-05 20:34:55

3

應該

function placeHolderExists(text,placeholdername) { 
    var pattern = new RegExp('\\$'+placeholdername+'\\$');  
    return pattern.test(text); 
} 

你需要加倍逃避你$跡象

編輯:
annakata解釋了原因。

0

雙斜槓。

new RegExp('\\$'+placeholdername+'\\$'); 
3

這種困惑是爲什麼你不應該使用正則表達式的另一個例子,除非你真的需要。

return text.indexOf('$'+placeholdername+'$')!=-1; 

...更簡單,更快速,並且當您有趣的角色時不會翻倒。

相關問題