我正在尝试匹配以下字符串:
something, something, something, something, something shouldignore
所需的输出为:[something, something, something, something, something]
。我想出了这个RegExp (^[\t ]+[^,\s]+)
,但不适用于其他4个something
。
Demo。
答案 0 :(得分:3)
答案 1 :(得分:0)
您的正则表达式仅匹配第一部分,因为您使用锚点^
来声明字符串的开头,并且不会重复已匹配的内容。
您可以使用正则表达式并在末尾添加(?:,\1)*
,以便使用后向引用重复已捕获的内容。您也可以将锚点^
从组中移出并放在开始位置。
^([\t ]+[^,\s]+)(?:,\1)*
您可以用逗号分割并修剪结果数组中的项目:
const str = " something, something, something, something, something shouldignore";
let res = str.match(/^([\t ]+[^,\s]+)(?:,\1)*/)[0]
.split(',')
.map(x => x.trim());
console.log(res);
如果在something
之后可能还会出现另一个shouldignore
,则可以用一个逗号分隔,后跟1+个空格字符,?\s+
,并过滤出与逗号不同的字符。从split返回的数组中的第一项:
const str = " something, something, something, something, something shouldignore something";
let res = str.trim()
.split(/,?\s+/)
.filter((x, _, a) => x === a[0]);
console.log(res);