【发布时间】:2020-07-09 13:15:09
【问题描述】:
我正在尝试编写一个简单的正则表达式,它将删除字符串中除 2 和 3 个字母单词之外的所有单词中的尾随 'e' 字符。 以下解决方案将正确找到单词,但会匹配完整的单词,而不仅仅是 'e'。
/\b\w{2,}e\b/
我无法将建议的解决方案与前瞻组(使用“(?=)”)结合起来正常工作。
【问题讨论】:
-
this 有帮助吗?
标签: javascript regex string
我正在尝试编写一个简单的正则表达式,它将删除字符串中除 2 和 3 个字母单词之外的所有单词中的尾随 'e' 字符。 以下解决方案将正确找到单词,但会匹配完整的单词,而不仅仅是 'e'。
/\b\w{2,}e\b/
我无法将建议的解决方案与前瞻组(使用“(?=)”)结合起来正常工作。
【问题讨论】:
标签: javascript regex string
使用回顾:
(?<=\w\w\w)e\b
【讨论】:
\w{3}或者任意数量的字母,意思完全一样。
如果要匹配除第一个、第二个或第三个字符之外的单词中的训练 e 字符,您可以捕获 1-3 个单词字符,然后匹配尽可能少的单词字符并匹配尾随的 e 字符。
\b(\w{1,3}\w*?)e*\b
在替换使用组1中。
要删除单个 e,请将 e* 更改为 e?
[
"theeeeeeeee",
"the",
"te",
"ee",
"eee",
"eeee",
"abcdefeee",
"ehteheeee",
].forEach(s => console.log(s.replace(/\b(\w{1,3}\w*?)e*\b/, "$1")))
如果您不必考虑开头的单词边界,您可以捕获 3 个单词字符并在结尾匹配单个 e。
(\w{3})e\b
[
"thee",
"the",
"te",
"ee",
"eee",
"eeee",
"abcdefeee",
"ehteheeee",
].forEach(s => console.log(s.replace(/(\w{3})e\b/, "$1")))
【讨论】:
(?=.{4,})e+$ 中的断言在每个位置上运行。在feee 之前,断言为真,但不能匹配e+$,因为还有一个f