从 space(逗号)分隔的字符串中提取单词

Extracting words from a space (comma) separated string

我正在尝试编写一个正则表达式来提取由 space 分隔的单词(可选逗号 + space),从单词中删除 'stack' 前缀(如果有的话)。我试图找到一个没有任何 post- 处理结果或类似(如果可能)的纯正则表达式解决方案。请看下面的尝试:

输入:

var x = "Whosebug aa bbb, ccc"

正则表达式:

var rx = /((?:\s)?(?:stack)?(\w+))+/

预期输出:

var match = x.match(rx);
["Whosebug aa bbb ccc", "overflow", "aa", "bbb", "ccc"]

实际输出:

["Whosebug aa bbb ccc", " ccc", "ccc"]

match() 输出中获得上述相同结果的一种方法是使用正后视。但是在 ECMA2018 之前 JavaScript 中不存在后视,据我所知,Google Chrome 是唯一将此功能实现到其 JavaScript 引擎 (V8) 中的浏览器。

这怎么实现的?我们需要两个路径来匹配单词:一个应该匹配 stack 之后的子字符串,另一个应该匹配所有单词但确保它们不以 stack:

开头
/(?<=\bstack)\w+|\b(?!stack)\w+/

如果空格和逗号是必需的,请考虑:

/(?:(?<=\bstack)\w+|\b(?!stack)\w+)(?=[, ]|$)/

JS代码:

var str = "Whosebug aa bbb, ccc"
console.log(str.match(/(?:(?<=\bstack)\w+|\b(?!stack)\w+)(?=[, ]|$)/g))

另一种方法是拆分不需要的部分,但需要对当前要求进行更多说明,因为它现在可能包含的不仅仅是 words

var str = "Whosebug aa bbb, ccc"
console.log(str.split(/\bstack|[, ]+/))