我想分割字符串http://some.com/\,brabra,400,500
分成['http://some.com/\,brabra', 400, 500]
如何以逗號分割字符串但忽略 ,?
我已經試過這個,但錯誤,因爲lookbehind在js中不支持。 'http://some.com/\,brabra,400,500'.split(/(?<!\\),/g)
任何其他想法做到這一點?
我想分割字符串http://some.com/\,brabra,400,500
分成['http://some.com/\,brabra', 400, 500]
如何以逗號分割字符串但忽略 ,?
我已經試過這個,但錯誤,因爲lookbehind在js中不支持。 'http://some.com/\,brabra,400,500'.split(/(?<!\\),/g)
任何其他想法做到這一點?
您可以使用匹配方法與(?:[^,\\]+|\\.)+
:
match(/(?:[^,\\]+|\\.)+/g)
詳細:在(?:[^,\\]+|\\.)+
比賽比,
和\
以外的1個+字符的一個或多處((?:...)+
) (與[^,\\]+
)或(|
)任何轉義序列(\\.
)
var s = "http://some.com/\\,brabra,400,500"
console.log(s.match(/(?:[^,\\]+|\\.)+/g));
或替代方法如果與後面總是以數字要拆分的逗號:
split(/,(?=\d)/)
var s = "http://some.com/\\,brabra,400,500"
console.log(s.split(/,(?=\d)/));
不錯。可以簡化爲'/(\\。| [^,])+/g'。 – 2016-08-12 12:02:15
太棒了。非常感謝。 –
可以使用模擬積極向前看符號帶倒車字符串:
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);
注:正則表達式的工作here,但不是在片段。
經典之作,如果這樣的問題稍微不雅的做法是用魔法令牌替換一些字符,然後把它們放回後:
str
.replace("\\,", "DONT_SPLIT_HERE")
.split(',')
.map(part => part.replace("DONT_SPLIT_HERE", "\\,")
試試['分裂(/,(= \ d)/ )'](https://regex101.com/r/tG5vE6/1) –