Javascript正则表达式 - 拆分字符串

Was*_*ace 15 javascript regex string split

苦苦挣扎的正则表达式要求.我需要将字符串拆分成数组,无论它在哪里找到正斜杠.但是如果正斜杠之前是逃避的话.

例如,如果我有这个字符串:

hello/world
Run Code Online (Sandbox Code Playgroud)

我希望将它分成如下数组:

arrayName[0] = hello
arrayName[1] = world
Run Code Online (Sandbox Code Playgroud)

如果我有这个字符串:

hello/wo\/rld
Run Code Online (Sandbox Code Playgroud)

我希望将它分成如下数组:

arrayName[0] = hello
arrayName[1] = wo/rld
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

Ala*_*ore 23

我不会用split()这项工作.匹配路径组件本身,而不是分隔符更容易.例如:

var subject = 'hello/wo\\/rld';
var regex = /(?:[^\/\\]+|\\.)+/g;
var matched = null;
while (matched = regex.exec(subject)) {
  print(matched[0]);
}
Run Code Online (Sandbox Code Playgroud)

输出:

hello
wo\/rld
Run Code Online (Sandbox Code Playgroud)

在ideone.com上测试一下

  • 这对我来说是最好的答案. (2认同)

Tim*_*own 3

下面的代码有点冗长,但是可以工作,并且通过不使用正则表达式来避免IE 的分割实现损坏的问题。

function splitPath(str) {
    var rawParts = str.split("/"), parts = [];
    for (var i = 0, len = rawParts.length, part; i < len; ++i) {
        part = "";
        while (rawParts[i].slice(-1) == "\\") {
            part += rawParts[i++].slice(0, -1) + "/";
        }
        parts.push(part + rawParts[i]);
    }
    return parts;
}

var str = "hello/world\\/foo/bar";
alert( splitPath(str).join(",") );
Run Code Online (Sandbox Code Playgroud)