Javascript 在RegExp字符串中转义反斜杠
我试图在下面的允许字符列表中添加反斜杠。必须使用并传入,如下面的RegExp字符串所示: 我试过逃避,但没有成功:Javascript 在RegExp字符串中转义反斜杠,javascript,regex,Javascript,Regex,我试图在下面的允许字符列表中添加反斜杠。必须使用并传入,如下面的RegExp字符串所示: 我试过逃避,但没有成功: expandedText: function (e) { var regex = new RegExp("^[\\w., #&/-]+$"); var key = String.fromCharCode(!e.charCode ? e.which : e.charCode); if (!regex.test(key)) {
expandedText: function (e) {
var regex = new RegExp("^[\\w., #&/-]+$");
var key = String.fromCharCode(!e.charCode ? e.which : e.charCode);
if (!regex.test(key)) {
event.preventDefault();
return false;
}
}
因为您是从字符串文字创建正则表达式,所以双反斜杠被解释为字符串中的转义反斜杠,您将使用此正则表达式:
^[\w., #&/-]+$
这与单词字符匹配,但找不到反斜杠
解决方案:转义两个反斜杠,并为\w添加一个反斜杠,从而产生六个反斜杠:
var regex = new RegExp("^[\\\\\\w., #&/-]+$");
var regex = /^[\\\w., #&/-]+$/;
或者更好的方法是使用正则表达式文字,并且只使用三个反斜杠:
var regex = new RegExp("^[\\\\\\w., #&/-]+$");
var regex = /^[\\\w., #&/-]+$/;
除了转义正则表达式的反斜杠外,还必须转义字符串文字中的每个反斜杠。也就是说,字符串文本
"\\"
计算为由单个反斜杠组成的单字符串序列。因为需要两个反斜杠来表示正则表达式中的单个反斜杠,所以字符串文字中需要四个反斜杠来表示正则表达式中的两个反斜杠:
"\\\\"
这表示正则表达式中的两个字符序列:一个反斜杠,前面是转义反斜杠,用于填充正则表达式。也就是说,这两个使用regex文本和RegExp构造函数的表达式是等效的:
/\\/
new RegExp("\\\\")
每个正则表达式对象都将匹配一个反斜杠
使用RegExp构造函数,可以执行以下操作:新建RegExp^[\w.&/-]+$;但是,似乎正则表达式文字更简洁,没有缺点,因为您不会使用不同的字符串动态构建正则表达式:
var regex = /^[\\\w., #&/-]+$/
第一个转义字符可能在进入正则表达式引擎之前被PHP捕获。尝试四个反斜杠?也就是说,您的目的是用\w捕获单词字符,但它不是捕获单词字符?或者您正在尝试捕获反斜杠并同时捕获文字w?还是反斜杠和所有单词字符?@apsillers-是的,它捕捉单词字符很好。我也需要反斜杠。@囚犯零我想你在找这样的东西:RegExp^[\\\w,&/-]+$@hajile78不,那不正确。这就创造了和OP已经拥有的雷克斯一样的雷克斯。啊,是的。旧的六元组斜杠技术…我应该知道jk