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

Javascript正则表达式-拆分字符串,javascript,regex,string,split,Javascript,Regex,String,Split,与正则表达式要求斗争。我需要将字符串拆分为数组,只要它找到正斜杠。但如果正斜杠前面有转义符,则不会 例如,如果我有这个字符串: hello/world hello/wo\/rld 我希望将其拆分为如下数组: arrayName[0] = hello arrayName[1] = world arrayName[0] = hello arrayName[1] = wo/rld 如果我有这个字符串: hello/world hello/wo\/rld 我希望将其拆分为如下数组: arra

与正则表达式要求斗争。我需要将字符串拆分为数组,只要它找到正斜杠。但如果正斜杠前面有转义符,则不会

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

hello/world
hello/wo\/rld
我希望将其拆分为如下数组:

arrayName[0] = hello
arrayName[1] = world
arrayName[0] = hello
arrayName[1] = wo/rld
如果我有这个字符串:

hello/world
hello/wo\/rld
我希望将其拆分为如下数组:

arrayName[0] = hello
arrayName[1] = world
arrayName[0] = hello
arrayName[1] = wo/rld

有什么想法吗?

这里有一个例子,这里有一种方法是根据以下技术改编的:

鉴于:

Testing/one\/two\/three
结果是:

[0]: Testing
[1]: one/two/three

首先使用简单的“假”查找将
/
替换为
[**]
,并将
\/
替换为
/
,然后在
[**]
值上拆分。(显然,将
[**]
替换为字符串中不包含的任何内容。)

对于短代码,可以使用reverse模拟负回溯

function reverse(s){
  return s.split('').reverse().join('');
}

var parts = reverse(myString).split(/[/](?!\\(?:\\\\)*(?:[^\\]|$))/g).reverse();
for (var i = parts.length; --i >= 0;) { parts[i] = reverse(parts[i]); }

但是为了提高效率,可能最好在
/[/]/
上拆分,然后遍历数组并重新加入最后有转义的元素。

类似的操作可能会帮您解决这个问题

var str = "/hello/wo\\/rld/";
var split = str.replace(/^\/|\\?\/|\/$/g, function(match) {
  if (match.indexOf('\\') == -1) {
    return '\x00';
  }
  return match;
}).split('\x00');       

alert(split);

下面的内容有点冗长,但会起作用,并通过不使用正则表达式来避免问题

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(",") );
函数拆分路径(str){
var rawParts=str.split(“/”),parts=[];
对于(变量i=0,len=rawParts.length,part;i
/* 如果您是从ajax响应或数据库查询中获取字符串, 也就是说,字符串没有被javascript解释, 可以匹配没有斜杠或有转义斜杠的字符序列。 如果要在脚本中定义字符串,请转义转义并在匹配后剥离它们。 */

我不会将
split()
用于此作业。匹配路径组件本身要比匹配分隔符容易得多。例如:

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

hello
wo\/rld

此页面可能会有所帮助:不要将此作为答案发布,因为我现在没有时间针对您的需要提出具体的示例。但我很肯定你能从那站到那里。祝你好运。这可能对Ruby很好,但看起来它对JavaScript不起作用,至少在
split
中不起作用:如果你想用另一种方式使用它,我建议你发布。请在这里发布解决方案,而不是在另一个网站上发布。这不起作用:
“hello/wor\/rld”。匹配(/([a-z]+(\\\\/)?[a-z]+)/)/)
=
[“你好”,“你好”,未定义]
@Justin:如果您使用
g
标识符
str.match(/[a-z]+(\\\\/)?[a-z]+/g);
,但如果有多个
\/
(或除小写字母以外的任何其他字符),则会失败因此,正如您所说,在此处发布解决方案非常重要。谢谢:)这是一种适合我的解决方案。干杯!这似乎是我一直在寻找的解决方案。这看起来是我的最佳答案。同意。绝对是最佳答案。