我有一个字符串,例如
'frontend\less\defaults\layout.css?file=\foo'
我想要一个替换它的正则表达式
'frontend/less/defaults/layout.css?file=\foo'
我试过/\\/g
了,但它在 a 之后一直匹配东西\?
,我想以某种方式避免
我有一个字符串,例如
'frontend\less\defaults\layout.css?file=\foo'
我想要一个替换它的正则表达式
'frontend/less/defaults/layout.css?file=\foo'
我试过/\\/g
了,但它在 a 之后一直匹配东西\?
,我想以某种方式避免
以下将起作用,在您的正则表达式中使用前瞻:
var myString="path\\to\\file.php?query=\\something"
var r=(/\?/g.test(myString))?/(\\)(?=.+[\?])/ig:/\\/ig;
.replace(r,"/")
您可以使用String.replace
, 替换功能来做到这一点:
str.replace(/^([^?]*)/, function (_, $1) {
return $1.replace(/\\/g, '/');
});
无论查询字符串是否存在,这都会起作用。
解释
/^([^?]*)/
([^?]*)
将匹配并捕获之前的所有内容?
(如果有)。
我假设 URL 是有效的,所以这里没有进行验证。
(感谢@Pumbaa80 的建议。如果查询字符串部分在替换后保持不变,则无需匹配查询字符串部分)
除非您\
事先知道 's 的数量,否则我怀疑您是否可以使用可理解的正则表达式来做到这一点。我会:
?
和之后的部分