2012-03-08 18 views
5

我正在嘗試輸入文本字段的值並在正則表達式中使用它。這是我必須匹配一條線的開始。轉義正則表達式中的變量

regex = new RegExp('^' + inputValue, 'i') 

它工作正常的定期的字符串開始有字母數字字符,但我用這爲美元數額爲好。當輸入字段以'$'(美元符號)開頭時,我會得到不同的結果。

我如何逃避上面的變量被視爲一個簡單的字符串?我已經試過這一點,但沒有運氣:

regex = new RegExp('^[' + inputValue + ']', 'i') 
+0

PHP有一個'preg_quote ',我不認爲JavaScript有一個。 PHP函數轉義'。 \ + *? [^] $(){} =! < > | :-',所以我想用他們的轉義版本'替換'這些。 – 2012-03-08 17:15:27

+2

看看這個問題的答案http://stackoverflow.com/questions/3614440/replicate-the-functionality-of-javas-pattern-quote-in-a-javascript-regexp – Danny 2012-03-08 17:15:36

+1

[This](http://也許是simonwillison.net/2006/Jan/20/escape/#p-6)。 – pimvdb 2012-03-08 17:15:49

回答

3

可能是更好的實現我見過

http://phpjs.org/functions/preg_quote:491

複製下面的後人

function preg_quote (str, delimiter) { 
    // Quote regular expression characters plus an optional character 
    // 
    // version: 1109.2015 
    // discuss at: http://phpjs.org/functions/preg_quote // + original by: booeyOH 
    // + improved by: Ates Goral (http://magnetiq.com) 
    // + improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) 
    // + bugfixed by: Onno Marsman 
    // + improved by: Brett Zamir (http://brett-zamir.me) // *  example 1: preg_quote("$40"); 
    // *  returns 1: '\$40' 
    // *  example 2: preg_quote("*RRRING* Hello?"); 
    // *  returns 2: '\*RRRING\* Hello\?' 
    // *  example 3: preg_quote("\\.+*?[^]$(){}=!<>|:"); // *  returns 3: '\\\.\+\*\?\[\^\]\$\(\)\{\}\=\!\<\>\|\:' 
    return (str + '').replace(new RegExp('[.\\\\+*?\\[\\^\\]$(){}=!<>|:\\' + (delimiter || '') + '-]', 'g'), '\\$&'); 
} 
1

$一行的末尾匹配,所以如果你用inputValue的開始$,你正在尋找像^$9.99比賽,這顯然不會匹配任何東西,因爲9.99可以在行結束後不會來。

如果$爲你擔心,你可以通過查找inputValue的運行/替換,這樣$是逃到\$唯一的字符。

0

難道你沒有想過檢查字符串是否以indexOf的輸入開始?

做它在以下方式:

var inputValue = "some"; 
if ("some string".indexOf(inputValue.toLowerCase()) == 0) { 
    // test passed 
}