我需要一个正则表达式,该正则表达式必须与包含序列“ ab”的任何单词匹配一次。所以应该匹配这些:
不是这些:
使用当前的正则表达式\w*ab\w*
,您将获得第一个列表的全部,而第二个列表的第二个,正如下面的代码片段所示。如何指定仅包含一个'ab'的匹配项?
let text = "aaaabaaa ab abomination something abab bacba";
console.log(text.match(/\w*ab\w*/ig));
我搜索了一会儿却没有找到解决方案,但是如果这是某种重复,请告诉我,我将删除问题。
答案 0 :(得分:5)
您可以使用以单词边界(\b
)开头的正则表达式,然后使用负前瞻,这样可以避免匹配具有两个非连续ab
字母序列的单词:
\b(?!\w*ab\w*ab)\w*ab\w*
请参见regex demo
详细信息
\b
-单词边界(?!\w*ab\w*ab)
-如果在当前位置的右边紧接有两个重复的0+单词字符和ab
\w*
-0个以上的字符字符ab
-一个ab
子字符串\w*
-0个以上的字符字符。请注意,在某些情况下,您只需要匹配字母,然后更改\w
就有意义(它匹配字母,数字和下划线,并且如果匹配Unicode,则可以匹配更多内容)到[^\W\d_]
,[[:alpha:]]
,[a-zA-Z]
,\p{L}
等,具体取决于您的需求和正则表达式引擎。