0

好的,所以虽然该模式[abc]匹配单个字符a,bc, 但该模式[^abc]匹配任何不是 a,b或的给定字符c

现在,如果我在上面的语句中用字符串替换字符,如果我还将第一个模式更改为交替构造,它仍然适用,例如(abc|def|ghi). -- 它将匹配三个字符的连续字符串,等于abc、、defghi。我能做些什么来匹配任何等于abc、、def或的三个字符的字符串ghi

4

2 回答 2

2

这是正则表达式的常见问题,简短的回答是“否”,正则表达式的操作方式不提供“除 ... 之外的任何 3 字母字符串”的说法。

然而,一些正则表达式引擎允许所谓的“负前瞻断言”。这些有点难以理解 -如果从技术上讲,这个环视的解释似乎很好地涵盖了它。

前瞻的重要之处在于它是“零宽度”——它不会“用完”任何字符串。因此,在 Javascript 中,您可以匹配这样的字符串:'abc123ghi'.match(/abc(?!def)...ghi/)-表示后面(?!def)不能有字母,但需要在那里表示应该有其他 3 个字符。'def''abc'...

于 2012-09-15T13:45:58.310 回答
0

您可以使用否定前瞻来执行您所说的一些操作:

xyz(?!abc|def|ghi)

这意味着“xyz 后跟除 abc、def 或 ghi 之外的任何内容”。它实际上并没有消耗源,所以在那之后你会把应该继续匹配的东西放在“xyz”之后。那是,

/xyz(?!abc|def|ghi)(\w*)/

匹配“xyzhello”,第一个捕获组将包含“hello”。

于 2012-09-15T13:39:21.937 回答