从 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|[, ]+/))
我正在尝试编写一个正则表达式来提取由 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|[, ]+/))