首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >从以空格(逗号)分隔的字符串中提取单词

从以空格(逗号)分隔的字符串中提取单词
EN

Stack Overflow用户
提问于 2019-03-20 06:11:52
回答 1查看 1.1K关注 0票数 3

我正在尝试编写一个正则表达式,它提取由空格(也可以是逗号+空格)分隔的单词,从单词中删除'stack‘前缀(如果有的话)。我正在尝试寻找一个纯粹的正则表达式解决方案,而不需要对结果进行任何后处理或类似的处理(如果可能)。请看下面的尝试:

输入

var x = "stackoverflow aa bbb, ccc"

正则表达式

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

期望的输出

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

实际输出

["stackoverflow aa bbb ccc", " ccc", "ccc"]
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-20 07:24:53

match()输出中获得上述相同结果的一种方法是使用正向回溯。但是JavaScript直到ECMA2018才出现,而且据我所知,Google Chrome是唯一一个在JavaScript引擎(V8)中实现了这一功能的浏览器。

这是如何实现的呢?我们需要两个路径来匹配单词:一个路径应该匹配stack后面的子字符串,另一个路径应该匹配所有单词,但要确保它们不是以stack开头

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

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

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

JS代码:

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

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

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55250729

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档