首页 > 解决方案 > 使用正则表达式从字符串中解析艺术家

问题描述

我正在尝试 使用 javascript将字符串读取"Ludacris feat. Lil Jon, Drake & Elvis Presley"到数组中。["Ludacris", "Lil Jon", "Drake", "Elvis Presley"]

字符串总是具有相同的结构,但有时它们在特色艺术家周围有括号,例如[feat. ... ](feat. ... )

我现在拥有的是这样的: (\s*\b(feat)\b[.]?\s*)|(\s*,\s*)|(\s*&\s*)

当我在https://regex101.com/上对其进行测试时,它似乎正确匹配但是,以下代码不起作用

var a = "Ludacris feat. Lil Jon, Drake & Elvis Presley".split(/(\s*\b(feat)\b[.]?\s*)|(\s*,\s*)|(\s*&\s*)/);
console.log(a);

输出是

[
  'Ludacris', ' feat. ',
  'feat',     undefined,
  undefined,  'Lil Jon',
  undefined,  undefined,
  ', ',       undefined,
  'Drake',    undefined,
  undefined,  undefined,
  ' & ',      'Elvis Presley'
]

我在这里想念什么?

标签: javascriptregexstringsplit

解决方案


尝试不带括号。使用捕获组使您可以单独匹配字符串,因此如果您使用它会创建更多未定义的项目split()

var a = "Ludacris feat. Lil Jon, Drake & Elvis Presley".split(/\s*\bfeat\b[.]?\s*|\s*,\s*|\s*&\s*/);
console.log(a);


推荐阅读