积极的前瞻没有按预期工作
Positive lookahead not working as expected
我有以下具有正前瞻性的正则表达式:
/black(?=hand)[ s]/
我希望它匹配 blackhands 或 blackhand。但是,它不匹配任何内容。我正在 Regex101.
上测试
我做错了什么?
您的正则表达式不匹配 blackhands
或 blackhands
,因为它试图匹配 space 或字母 s
(字符 class [ s]
) 就在文本 black
之后,也在 black
.
之后展望 hand
要匹配两个输入,您需要先行:
/black(?=hands?)/
或者不使用任何前瞻并使用:
/blackhands?/
Good reference on lookarounds
Lookahead 不使用正在搜索的字符串。这意味着 [ s]
试图匹配紧跟在 black 之后的 space 或 s。但是,您的前瞻性说明 hand 必须遵循 black,因此正则表达式永远无法匹配任何内容。
要在使用前瞻时匹配 blackhands 或 blackhand ,请在前瞻内移动 [ s]
:black(?=hand[ s])
.或者,根本不使用前瞻:blackhand[ s]
.
简而言之,你应该使用
/\bblackhands?\b/
现在,您的正则表达式对于这项任务来说有点太复杂了。它包括
black
- 按字面意思匹配 black
(?=hand)
- 要求 hand
在 black
- 之后立即出现但不消耗字符,引擎保持在字符串中的相同位置!
[ s]
- 字符 class 匹配 space 或 s
- 必须紧跟在 black
[= 之后48=].
所以,你永远不会得到你的比赛,因为 space 或 s
没有出现在 hand
的第一个位置(它是 h
).
The difference is that lookaround actually matches characters, but then gives up the match, returning only the result: match or no match. That is why they are called "assertions". They do not consume characters in the string, but only assert whether a match is possible or not.
你的情况是没有必要的。
只需使用 \b
- a word boundary - 匹配整个单词 blackhand
或 blackhands
.
我有以下具有正前瞻性的正则表达式:
/black(?=hand)[ s]/
我希望它匹配 blackhands 或 blackhand。但是,它不匹配任何内容。我正在 Regex101.
上测试我做错了什么?
您的正则表达式不匹配 blackhands
或 blackhands
,因为它试图匹配 space 或字母 s
(字符 class [ s]
) 就在文本 black
之后,也在 black
.
hand
要匹配两个输入,您需要先行:
/black(?=hands?)/
或者不使用任何前瞻并使用:
/blackhands?/
Good reference on lookarounds
Lookahead 不使用正在搜索的字符串。这意味着 [ s]
试图匹配紧跟在 black 之后的 space 或 s。但是,您的前瞻性说明 hand 必须遵循 black,因此正则表达式永远无法匹配任何内容。
要在使用前瞻时匹配 blackhands 或 blackhand ,请在前瞻内移动 [ s]
:black(?=hand[ s])
.或者,根本不使用前瞻:blackhand[ s]
.
简而言之,你应该使用
/\bblackhands?\b/
现在,您的正则表达式对于这项任务来说有点太复杂了。它包括
black
- 按字面意思匹配black
(?=hand)
- 要求hand
在black
- 之后立即出现但不消耗字符,引擎保持在字符串中的相同位置![ s]
- 字符 class 匹配 space 或s
- 必须紧跟在black
[= 之后48=].
所以,你永远不会得到你的比赛,因为 space 或 s
没有出现在 hand
的第一个位置(它是 h
).
The difference is that lookaround actually matches characters, but then gives up the match, returning only the result: match or no match. That is why they are called "assertions". They do not consume characters in the string, but only assert whether a match is possible or not.
你的情况是没有必要的。
只需使用 \b
- a word boundary - 匹配整个单词 blackhand
或 blackhands
.