转义正则表达式中的变量

问题描述:

我正在尝试输入文本字段的值并在正则表达式中使用它。这是我必须匹配一条线的开始。转义正则表达式中的变量

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

可能是更好的实现我见过

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'), '\\$&'); 
} 

$一行的末尾匹配,所以如果你用inputValue的开始$,你正在寻找像^$9.99比赛,这显然不会匹配任何东西,因为9.99可以在行结束后不会来。

如果$为你担心,你可以通过查找inputValue的运行/替换,这样$是逃到\$唯一的字符。

难道你没有想过检查字符串是否以indexOf的输入开始?

做它在以下方式:

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