-1

我有一个字符串,例如

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

我想要一个替换它的正则表达式

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

我试过/\\/g了,但它在 a 之后一直匹配东西\?,我想以某种方式避免

4

3 回答 3

2

以下将起作用,在您的正则表达式中使用前瞻:

var myString="path\\to\\file.php?query=\\something"
var r=(/\?/g.test(myString))?/(\\)(?=.+[\?])/ig:/\\/ig;
    .replace(r,"/")
于 2013-05-17T05:50:47.883 回答
2

您可以使用String.replace, 替换功能来做到这一点:

str.replace(/^([^?]*)/, function (_, $1) {
    return $1.replace(/\\/g, '/');
});

无论查询字符串是否存在,这都会起作用。

解释

/^([^?]*)/

([^?]*)将匹配并捕获之前的所有内容?(如果有)。

我假设 URL 是有效的,所以这里没有进行验证。

(感谢@Pumbaa80 的建议。如果查询字符串部分在替换后保持不变,则无需匹配查询字符串部分)

于 2013-05-17T05:57:58.550 回答
1

除非您\事先知道 's 的数量,否则我怀疑您是否可以使用可理解的正则表达式来做到这一点。我会:

  • 将字符串分成两部分: 之前的部分?和之后的部分
  • 在第一部分使用你的正则表达式
  • 将两根弦重新放在一起。
于 2013-05-17T05:48:13.573 回答