如何用逗号分割字符串但忽略\,?

时间:2016-08-12 10:19:53

标签: javascript regex

我想将字符串http://some.com/\,brabra,400,500拆分为['http://some.com/\,brabra', 400, 500]

我已经尝试过这个,但错误是因为js中不支持lookbehind。 'http://some.com/\,brabra,400,500'.split(/(?<!\\),/g)

还有其他想法吗?

2 个答案:

答案 0 :(得分:2)

您可以将匹配方法与(?:[^,\\]+|\\.)+

一起使用
match(/(?:[^,\\]+|\\.)+/g)

请参阅regex demo

详细信息(?:[^,\\]+|\\.)+匹配除(?:...)+,以外的1个以上字符的1个或多个匹配项(\)(与[^,\\]+)或(|)任何转义序列(\\.

&#13;
&#13;
var s = "http://some.com/\\,brabra,400,500"
console.log(s.match(/(?:[^,\\]+|\\.)+/g));
&#13;
&#13;
&#13;

或者,如果要分割的逗号后面跟着一个数字,则为解决方法:

split(/,(?=\d)/)

请参阅this regex demo

&#13;
&#13;
var s = "http://some.com/\\,brabra,400,500"
console.log(s.split(/,(?=\d)/));
&#13;
&#13;
&#13;

答案 1 :(得分:1)

你可以使用反转字符串来模拟正向前瞻:

&#13;
&#13;
String.prototype.reverse = function() {
  return this.split("").reverse().join("");
}

Array.prototype.reverseElements = function() {
  var ar = [];
  for (var i = 0; i < this.length; i++) {
    if (typeof this[i] === 'string')
      ar[i] = this[i].reverse();
    else {
      //Do something if not a String
    }
  }
  return ar;
}

var str = "http://some.com/\,brabra,400,500";
var ar = str.reverse().split(/,(?!\\)/).reverse().reverseElements();

console.log(ar);
&#13;
&#13;
&#13;

注意:正则表达式工作here,但不在代码段中。