JavaScript 正则表达式:转义字符串 "c++"?
JavaScript Regex: Escape the string "c++"?
我正在为输入文本字段编写一些正则表达式,但在转义“+”或“?”等特殊字符时遇到了一些问题。
我已经使用了 these two 问题,它们适用于 c+ 这样的字符串,但是如果我输入 c++ 我在控制台中收到以下错误 Invalid regular expression: /c++/: Nothing to repeat
代码如下:
$('input').keyup(function(){
var val = $(this).val().trim().toLowerCase();
// from:
//val.replace(/[-\/\^$*+?.()|[\]{}]/g, '\$&');
//from:
val = val.replace(/[\-\[\]{}()*+?.,\\^$|#\s]/g, "\$&");
var re = new RegExp(val, 'ig');
console.log(re);
});
这是一个jsFiddle example of the issue
谢谢
您的代码中存在错误。由于字符串在 JavaScript 中是不可变的,replace
不会更改它,但 returns 会更改一个新字符串。您进行了替换,但没有获取返回值
改变
val.replace(/[\-\[\]{}()*+?.,\\^$|#\s]/g, "\$&");
到
val = val.replace(/[\-\[\]{}()*+?.,\\^$|#\s]/g, "\$&");
你的正则表达式很好,你只是丢弃了替换调用的结果。
替换为 val = val.replace(...);
工作fiddle
我正在为输入文本字段编写一些正则表达式,但在转义“+”或“?”等特殊字符时遇到了一些问题。
我已经使用了 these two 问题,它们适用于 c+ 这样的字符串,但是如果我输入 c++ 我在控制台中收到以下错误 Invalid regular expression: /c++/: Nothing to repeat
代码如下:
$('input').keyup(function(){
var val = $(this).val().trim().toLowerCase();
// from:
//val.replace(/[-\/\^$*+?.()|[\]{}]/g, '\$&');
//from:
val = val.replace(/[\-\[\]{}()*+?.,\\^$|#\s]/g, "\$&");
var re = new RegExp(val, 'ig');
console.log(re);
});
这是一个jsFiddle example of the issue
谢谢
您的代码中存在错误。由于字符串在 JavaScript 中是不可变的,replace
不会更改它,但 returns 会更改一个新字符串。您进行了替换,但没有获取返回值
改变
val.replace(/[\-\[\]{}()*+?.,\\^$|#\s]/g, "\$&");
到
val = val.replace(/[\-\[\]{}()*+?.,\\^$|#\s]/g, "\$&");
你的正则表达式很好,你只是丢弃了替换调用的结果。
替换为 val = val.replace(...);
工作fiddle