转义正则表达式中的变量
问题描述:
我正在尝试输入文本字段的值并在正则表达式中使用它。这是我必须匹配一条线的开始。转义正则表达式中的变量
regex = new RegExp('^' + inputValue, 'i')
它工作正常的定期的字符串开始有字母数字字符,但我用这为美元数额为好。当输入字段以'$'(美元符号)开头时,我会得到不同的结果。
我如何逃避上面的变量被视为一个简单的字符串?我已经试过这一点,但没有运气:
regex = new RegExp('^[' + inputValue + ']', 'i')
答
可能是更好的实现我见过
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
}
PHP有一个'preg_quote ',我不认为JavaScript有一个。 PHP函数转义'。 \ + *? [^] $(){} =! | :-',所以我想用他们的转义版本'替换'这些。 – 2012-03-08 17:15:27
看看这个问题的答案http://stackoverflow.com/questions/3614440/replicate-the-functionality-of-javas-pattern-quote-in-a-javascript-regexp – Danny 2012-03-08 17:15:36
[This](http://也许是simonwillison.net/2006/Jan/20/escape/#p-6)。 – pimvdb 2012-03-08 17:15:49