JavaScript正则表达式分割函数split

3

这是我的文本“123,456/,789,ABC”,我想按照逗号分割,但不要分割“/,”。

var text = '123,456/,789,ABC';
var texts = text.split(/[^/],/g);
console.log(texts)

结果是 [ '12', '456/,78', 'ABC' ]

但我希望得到 [ '123', '456/,789', 'ABC' ]


3
为什么需要使用正则表达式?text.split(',') 已经足够了。 - Antiga
3
@Antiga如果这样做会将“456/”和“789”分开,而他想要的是“456/,789”。 - RockOnRockOut
@RockOnRockOut 你说得对。我看错了。我是根据他的问题来判断的,他只想按逗号分割。 - Antiga
2个回答

3

对于你的情况,你可以简单地使用这个正则表达式:

var text = '123,456/,789,ABC';
var texts = text.split(/\b,/g);
console.log(texts); // ["123", "456/,789", "ABC"]

这个想法是单词边界元字符\b不会匹配/,因为反斜杠不是一个单词字符,所以在/,之间没有单词边界。

正则表达式测试:http://regex101.com/r/qB6aT7/1


1

2
这是有效的 - 请注意,您需要使用 text.match(/REGEX/g) 而不是 text.split(/REGEX/g),因为此正则表达式匹配逗号之间的内容而不是逗号本身。 - Shai
1
你仍然可以使用split,只需要检查结果数组中的元素。这是它的输出:["", "123", undefined, "", "456/,789", undefined, "", undefined, "ABC", ""],所以忽略undefined和空字符串。 - catalyst294
@Shai - 实际上,使用match的结果仍然包括数组值中的逗号:["123,", "456/,789,", "ABC"] - talemyn
1
是的。所以你需要使用split并删除空匹配项(如果原始字符串中的空条目需要保留,则可能不可接受),或者使用match并删除尾随逗号。这都是因为JS缺乏向后查找 - 我想知道在这种情况下,正则表达式是否值得麻烦。 - Shai
1
是的,这很好。因此我可以使用下划线 _.compact() 来清理未使用的数据。 - Udomsak Aom Donkhampai

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接