我尝试构建一个 JavaScript 友好的正则表达式,它匹配以特定单词组 (A) 开头的任何字符串,并且如果字符串中包含其他单词,它们必须位于一组单词 (B) 内,或者不在单词组 (B) 内。词组(C)。
因此,给出以下词组 (A)、(B) 和 (C):
(A) Test, Sample
(B) Good, Stuff
(C) Hello, World
并给出以下以 (A) 中的任何单词开头的示例字符串:
Test
Test Good
Sample Stuff
Test Hello
Sample World
Test Hello Stuff
Sample Good World
Test Other
Test Other Stuff
Sample Other World
Test Other Stuff Other
将匹配以下字符串:
Test
Test Good
Sample Stuff
Test Other Stuff
Test Other Stuff Other
理想情况下,表达式只会消耗 A 组中的单词(本例中为“Test”和“Sample”),其余部分将由正向和负向前瞻处理。不过,我还可以处理以 (A) 开头的字符串的全部或部分,可能包含 (B) 但不包含 (C)。
我已经研究这个问题好几天了,到目前为止我在这个网站上找到的最接近的答案是:
是否有一个正则表达式来匹配包含A但不包含B的字符串 https://stackoverflow.com/q/8240765/6731332
然而,那里建议的解决方案不包括单独匹配起始单词的要求(就像我的示例中第一个匹配“Test”的情况一样)。
我最接近的解决方案是以下表达式:
^(Test|Sample).*(?=(Good|Stuff))(?!.*(Hello|World)).*
请参阅此处的工作示例:
https://regex101.com/r/nL0iE3/1 https://regex101.com/r/nL0iE3/1
然而,这不匹配 (A) 中单词的单个实例(例如“Test”),并且当它们出现在 (B) 中的单词之前时匹配 (C) 中的单词(例如“Sample World Good”)。
我希望这是有道理的,但如果我可以进一步澄清任何事情,请告诉我。我将非常感谢任何帮助或正确方向的指示。