难以理解?:,?=,?!和反向引用..

dun*_*nza 1 javascript regex

我正在学习一个脚本的正则表达式,我将在路上写下来,但我已经到了一个停止点.我基本上明白了什么?=,?!做什么,他们是"先行者".借用和示例:/Win (?=98)/如果后跟"98",则仅匹配"Win",而/Win (?!XP)/如果跟随"XP" 则匹配"Win "...对?

现在我真的没有得到?:分隔符.我还没有找到一个很好的例子,我真的非常,真的很困惑.:/我明白它应该匹配整个包含的模式或什么?

我很困惑的另一件事是反向引用.这是我发现的例子:正则表达式/<(\S+).*>(.*)<\/\1>/应该匹配"任何标签".我只是对浏览器的数字"1"感到困惑...这是第一场比赛 - 在这种情况下,我认为它会引用<角色 - 或其他什么?

我现在正在涉足正则表达的世界,并希望对这些概念做一些澄清,谢谢大家提前!

Jan*_*ger 5

你对先行断言的看法是正确的.

\1是指括号中的第一个子匹配,即(\S+)在您的示例中匹配的任何子匹配.\2指的是第二个(在例子中(.*)),依此类推.

?:另一方面,意味着那组括号不应该像引用那样绑定\1.如果您需要括号,但是之后并不真正关心获取匹配的文本,则可以使用它.所以,在正则表达式中/(?:abc)def(ghi)/,\1不会扩展为abc(因为我们使用了它关闭了?:),但是ghi.