正则表达式替换“\?”之前的所有反斜杠

时间:2013-05-17 05:42:06

标签: javascript regex

我有一个字符串,如

'frontend\less\defaults\layout.css?file=\foo'

我想要一个用

替换它的正则表达式
'frontend/less/defaults/layout.css?file=\foo'

我尝试了/\\/g,但它在\?之后保持匹配,我想以某种方式避免

3 个答案:

答案 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)

除非事先知道\的数量,否则我怀疑你能用一个易于理解的正则表达式做到这一点。我会:

  • 将字符串拆分为两部分:?之前的部分,然后是
  • 之后的部分
  • 在第一部分使用你的正则表达式
  • 把两根琴弦放在一起。