Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在正则表达式中转义变量_Javascript_Regex - Fatal编程技术网

Javascript 在正则表达式中转义变量

Javascript 在正则表达式中转义变量,javascript,regex,Javascript,Regex,我试图获取输入文本字段的值,并在正则表达式中使用它。这是我必须匹配的一行的开始 regex = new RegExp('^' + inputValue, 'i') 它适用于以字母数字字符开头的常规字符串,但我也将其用于美元金额。当输入字段以“$”(美元符号)开头时,我会得到不同的结果 如何将上面的变量转义为一个简单的字符串?我试过这个,但运气不好: regex = new RegExp('^[' + inputValue + ']', 'i') $匹配一行的结尾,因此如果您输入的值以$开头,

我试图获取输入文本字段的值,并在正则表达式中使用它。这是我必须匹配的一行的开始

regex = new RegExp('^' + inputValue, 'i')
它适用于以字母数字字符开头的常规字符串,但我也将其用于美元金额。当输入字段以“$”(美元符号)开头时,我会得到不同的结果

如何将上面的变量转义为一个简单的字符串?我试过这个,但运气不好:

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

$匹配一行的结尾,因此如果您输入的值以$开头,您将查找类似于
^$9.99
的匹配项,这显然不匹配任何内容,因为9.99不能位于行的结尾之后

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

如果
$
是您唯一担心的字符,您可以通过查找/替换运行inputValue,以便将
$
转义到
\$

您没有想过只检查字符串是否以
indexOf
的输入开头吗

按以下方式进行:

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

可能是我见过的最好的实现之一

为子孙后代抄袭

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'), '\\$&');
}
函数预引号(str,分隔符){
//引用正则表达式字符加上可选字符
// 
//版本:1109.2015
//讨论地点:http://phpjs.org/functions/preg_quote    //+原创者:booeyOH
//+改进:Goral(http://magnetiq.com)
//+改进者:凯文·范·佐内维尔德(http://kevin.vanzonneveld.net)
//+错误修复者:Onno Marsman
//+改进者:Brett Zamir(http://brett-zamir.me)//*示例1:preg_quote($40”);
//*返回1:“\$40”
//*示例2:preg_quote(“*RRRING*Hello?”);
//*返回2:“\*rring\*Hello\?”
//*示例3:preg\u quote(“\\.+*?[^]$(){}=!\:”;/*返回3:“\\.\+*\?\[\^\]\$\(\)\{\\\=\!\\\\\:”
返回(str+'').replace(新的RegExp('[.\\\\+*?\[\\\\^\\]$(){}=!\\;:\\'+(分隔符\\\\''+'-]','g'),'\$&');
}

PHP有
preg_quote
,我认为JavaScript没有。PHP函数转义
\+*?[ ^ ] $ ( ) { } = ! < > | : -
,所以我想用它们的转义版本来替换它们。也许看看这个问题的答案。函数escapeRegExp(str)的可能重复项{return str.replace(/[\-[]\/\{}()*\+\?\.\\\^\$\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\