javascript - 由于负前瞻的位置导致匹配差异?

标签 javascript php regex string lookahead

我对正则表达式有很多困惑,我正在努力解决它们。这里我有以下字符串:

{start}do or die{end}extended string

我的两个不同的正则表达式,我只改变了点的位置:

(.(?!{end}))* //returns: {start}do or di
                                      //^ See here
((?!{end}).)* //returns: {start}do or die
                                      //^ See here

为什么第一个正则表达式吃掉最后一个“e”?

还有这种负向前瞻如何使这个 * 量词不贪婪?我的意思是为什么它不能使用超出 {end} 的字符?

最佳答案

你说你的否定前瞻,不可能匹配正则表达式,在你的情况下是:{end}. 捕获除了新行之外的所有内容。

所以你的第一个正则表达式:

(.(?!{end}))*

它省略了 e,因为: e{end} 由于否定前瞻而无法匹配。在你的第二个正则表达式中,你在另一边有点的地方可以直到:{end}d 所以 e 包含在你的第二个正则表达式中。

关于javascript - 由于负前瞻的位置导致匹配差异?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31482156/

相关文章:

regex - VIM搜索并替换: change string before replace

javascript - 禁用openerp中的登录按钮

javascript - 初始化 AngularJS Controller 时出现问题 : Cannot set property . .. 未定义

php - 为 Braintree webhook 构建 PHPUnit 测试时间接修改重载属性

php - 使用 Laravel 的 TokenMismatchException : in VerifyCsrfToken. php 第 33 行

python - Fail2ban Regex - 不匹配日志文件中的行

javascript - 注册异步 javascript,声明式(静态)与动态

JavaScript + Mocha : probably a closure issue with functions declared inside a for loop

php - Laravel block 从每个 block 中跳过 1 条记录

c - regexec在c中获取xml标签的值