我想将字符串http://some.com/\,brabra,400,500
拆分为['http://some.com/\,brabra', 400, 500]
我已经尝试过这个,但错误是因为js中不支持lookbehind。
'http://some.com/\,brabra,400,500'.split(/(?<!\\),/g)
还有其他想法吗?
答案 0 :(得分:2)
您可以将匹配方法与(?:[^,\\]+|\\.)+
:
match(/(?:[^,\\]+|\\.)+/g)
请参阅regex demo
详细信息:(?:[^,\\]+|\\.)+
匹配除(?:...)+
和,
以外的1个以上字符的1个或多个匹配项(\
)(与[^,\\]+
)或(|
)任何转义序列(\\.
)
var s = "http://some.com/\\,brabra,400,500"
console.log(s.match(/(?:[^,\\]+|\\.)+/g));
&#13;
或者,如果要分割的逗号后面跟着一个数字,则为解决方法:
split(/,(?=\d)/)
var s = "http://some.com/\\,brabra,400,500"
console.log(s.split(/,(?=\d)/));
&#13;
答案 1 :(得分:1)
你可以使用反转字符串来模拟正向前瞻:
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;
注意:正则表达式工作here,但不在代码段中。