Javascript替换正则表达式未按预期工作
在下面的代码中,我希望字符串“/?\u转义\u片段\=/faq”转换为“/seo/faq” 相反,我得到的是“/?/seo/faq”。代码有什么问题Javascript替换正则表达式未按预期工作,javascript,regex,Javascript,Regex,在下面的代码中,我希望字符串“/?\u转义\u片段\=/faq”转换为“/seo/faq” 相反,我得到的是“/?/seo/faq”。代码有什么问题 var url = '/?_escaped_fragment_=/'; var rule = new RegExp('\/?_escaped_fragment_=(.*)'); alert(url.replace(rule,'/seo/$1')); // this shows up '/?/seo//' 您必须转义?,因为它表示前面的字符或组是
var url = '/?_escaped_fragment_=/';
var rule = new RegExp('\/?_escaped_fragment_=(.*)');
alert(url.replace(rule,'/seo/$1')); // this shows up '/?/seo//'
您必须转义
?
,因为它表示前面的字符或组是可选的
请参阅:
\/?
按字面意思匹配字符/
量词:?
在零到一次之间,尽可能多地返回,根据需要返回[贪婪]
这是您需要的正则表达式:
var rule = new RegExp('/\\?_escaped_fragment_=(.*)');
注意:在RegExp
构造函数中,转义与\\
一起工作,而与\
不一起工作,因为双反斜杠被解析为传递给构造函数的字符串中的单个反斜杠,只有在正则表达式中才有该单个反斜杠。如果只写一个反斜杠,则在将其解析为字符串时会使用该反斜杠,从而导致正则表达式没有反斜杠
另外,/
不需要以字符串形式转义,因为这是自动处理的
如果它是静态的,您可以简单地使用正则表达式:
var rule = /\/\?_escaped_fragment_=(.*)/;
var rule = /\/\?_escaped_fragment_=(.*)/;
?
匹配前面选择器的0或1。您需要使用正则表达式的反斜杠转义?
,然后转义字符串的反斜杠:
var rule = new RegExp('\/\\?_escaped_fragment_=(.*)');
这些双重转义问题是在字符串文本中使用正则表达式语法的结果。还可以保存几个字符并使用正则表达式文字:
var rule = /\/\?_escaped_fragment_=(.*)/;
var rule = /\/\?_escaped_fragment_=(.*)/;
?
在正则表达式中有特殊含义。转义它,使用一个regex文本而不是RegExp
构造函数。为什么不写一个文本RegExp?@torazaburo,给我一分钟,我就到了。为什么不写一个文本RegExp,这样你就不用担心双重转义了?此外,如果要将字符串传递给regexp构造函数,则无需转义正斜杠。为什么要使用双反斜杠?@torazaburonew regexp
在正则表达式是动态的情况下非常有用。我不确定OP的全部意图。@torazaburo正斜杠你说得对,我已经编辑了我的帖子。@wildbyte双反斜杠被解析为字符串中的单个反斜杠,只有这样正则表达式才能解析该单个反斜杠。如果只写一个反斜杠,则会使用一个反斜杠将其转换为字符串,从而导致正则表达式没有反斜杠。