使用正则表达式拆分字符串并将其转换为数组,但不包括空元素。

6

这里我有一个 JavaScript 字符串的例子:

example_string = "Answer 1| Answer 2| Answer 3|";

我正在尝试使用正则表达式获取类似于这样的数组:

Array ["Answer 1", " Answer 2", " Answer 3"]

我尝试过:
result = example_string.split('/[|]+/g');

并且也使用以下模式

'/[|]+/g'
'/[|]+\b/g'
'/[|]+[^$]/g'

我仍然得到一个数组,其中最后一个元素为空:
 Array ["Answer 1", " Answer 2", " Answer 3", ""]

那给我带来了很多麻烦。有人知道我在模式中犯了什么错误或如何修复它吗?


为什么不直接移除数组中的最后一项?看起来很简单啊... - gabrjan
2
只需使用:example_string.match(/[^|]+/g); - ridgerunner
此问题中没有捕获组。不是重复的。 - mob
2个回答

8

我总是喜欢匹配所有的东西,我总是讨厌分裂,但:

用于分割的正则表达式:(\|(?!$)) DEMO

与其分割,不如匹配:

正则表达式:(?:([\w\s]+)\|?)

你甚至可以使用[^\|]+来匹配任何你需要匹配的内容,但不能匹配|

DEMO


你是对的,似乎match方法比split更好,我最终使用了它。你为split写的第一个正则表达式很好用,但是现在最后一个数组元素末尾有"|"。虽然在你提供的网站上match方法的正则表达式很好用,但我的浏览器(Opera和FF)给出了错误的结果,因为每个元素末尾都有"|"。我修改了你的正则表达式为([\w\s]+[^|])来解决这个问题。非常感谢。 - scx

3

没有错误。这是完全正确的行为(split 如何知道这不是一个最后一列具有空值的 CSV 文件?)。如果您知道您的字符串总是以 | 结尾,您可以手动先删除最后一个字符。或者,如果数组的最后一个元素为空,您可以直接去掉它。然而,在 JavaScript 中我似乎找不到一种可能性告诉内置的 split 函数省略空结果。


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