我有一个字符串,如
'frontend\less\defaults\layout.css?file=\foo'
我想要一个用
替换它的正则表达式'frontend/less/defaults/layout.css?file=\foo'
我尝试了/\\/g
,但它在\?
之后保持匹配,我想以某种方式避免
答案 0 :(得分:2)
以下方法有效,请在正则表达式中使用前瞻:
var myString="path\\to\\file.php?query=\\something"
var r=(/\?/g.test(myString))?/(\\)(?=.+[\?])/ig:/\\/ig;
.replace(r,"/")
答案 1 :(得分:2)
您可以使用String.replace
执行此操作,并使用替换功能:
str.replace(/^([^?]*)/, function (_, $1) {
return $1.replace(/\\/g, '/');
});
无论查询字符串是否存在,这都将起作用。
<强>解释强>
/^([^?]*)/
([^?]*)
将匹配并捕获?
之前的所有内容(如果有的话)。
我假设网址有效,因此此处未进行验证。
(感谢@ Pumbaa80的建议。如果在更换后它将保持不变,则无需匹配查询字符串部分)
答案 2 :(得分:1)
除非事先知道\
的数量,否则我怀疑你能用一个易于理解的正则表达式做到这一点。我会:
?
之前的部分,然后是