问题标签 [lookaround]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
582 浏览

php - 正则表达式反向引用负前瞻原子组

我想匹配一个单引号或双引号,后跟任意数量的不是刚刚匹配的字符的字符,然后是匹配的字符之一:

应该匹配每端的双引号。但是,我希望匹配具有所有格性,因为任何已经测试过的字符都不应包含在任何未来的匹配中:

应该匹配,因为开头的双引号后面永远不会跟着另一个。我想出了:

但这仍然与我上面的第二个字符串示例相匹配,中间的单引号。我不明白为什么原子组不能做到这一点。我也无法通过任何其他原子分组安排来实现这一点。

此外,如果有可能只匹配引号之间的字符,同时断言引号存在,那就太好了。因为后向断言是固定宽度,所以我不能使用反向引用来断言捕获的单引号或双引号组发生在负前瞻之前。

0 投票
3 回答
232 浏览

java - java正则表达式中的嵌套环视

我有一个使用环视来确保捕获的字符串位于其他两个字符串之间的模式

所以换句话说,对于主题字符串

我的正则表达式看起来像

所以我想多次使用这个正则表达式,因为我可能正在寻找其他类似的东西

我想要一个像这样的正则表达式

说在我的正则表达式匹配之前找到“(测试字符串)”。

这似乎并不完全正确,我认为这是因为我在我的正则表达式中有环顾四周,我现在正嵌入到前瞻中......我能做些什么来纠正这种情况?

0 投票
1 回答
178 浏览

php - 解析平衡的嵌套 wiki 模板并通过正则表达式提取单行参数的内容

我知道解析嵌套字符串或 HTML 最好由真正的解析器完成,但在我的情况下,我有简单的模板,并且想从模板中提取 Wiki 参数“标题”的标题内容。我花了一段时间才实现这一点,但感谢 Lars Olav Torvik ( http://regex.larsolavtorvik.com/ ) 的正则表达式工具和这个用户论坛,我得到了它。可能有人觉得它有用。(我们都想贡献,他,不是吗?;-) 以下带有注释的代码可以解决问题。我必须通过环顾断言来做到这一点,以便在其中一个没有标题的情况下将两个模板混合在一起。

我还不确定正则表达式注释中的两个问题——看看(?# Questions: …)——我是否理解(?R). 是不是它从最外层定义的级别(即第二个正则表达式行\{\{和最后一个正则表达式行)获取要检查的内容\}\}?那会是正确的吗?+++之前的替代展位工作有什么区别(?R),所以在测试时似乎如此。

  1. 页面上的原始 wiki 模板(最简单):

    /li>
  2. 替换:

    /li>
  3. 然后输出带有每个模板上方由 TITLE 标记的标题,但前提是有标题:

    /li>

关于正则表达式理解或一些改进的问题有什么问题吗?谢谢,安德烈亚斯。

0 投票
2 回答
1689 浏览

python - Python 正则表达式:捕获前瞻值(捕获文本而不使用它)

我希望使用正则表达式将单词分成几组(vowels, not_vowels, more_vowels),使用​​标记来确保每个单词都以元音开头和结尾。

在这个例子中,我们得到:

问题是我希望匹配重叠 - 最后一组元音应该成为下一场比赛的第一组。如果我们按如下方式替换正则表达式,这似乎可以通过前瞻来实现:

我们得到:

这意味着我们正在匹配我想要的。但是,它现在不返回最后一组元音。我想要的输出是:

我觉得这应该是可能的(如果正则表达式可以检查第二组元音,我看不出它不能返回它们的原因),但除了蛮力方法之外,我找不到任何方法,循环通过我拥有它们并将下一个匹配的第一个字符附加到最后一个匹配,并将字符串的最后一个字符附加到最后一个匹配之后的结果。有没有更好的方法可以做到这一点?

可行的两件事是捕获前瞻值,或者在捕获值的同时不消耗匹配中的文本-我也找不到任何方法。

0 投票
2 回答
307 浏览

regex - 更健壮的正则表达式环视

这是输入字符串:$table_prefix = 'wp5t3s1tc_';它是较大配置文件的一部分。

我想匹配之间的任何东西''

我工作的表达式(?<=\$table_prefix(\s{2}=\s\'))(.*)?(?=\')不是很好,因为环视与=. 如果配置文件更改为两边的多个空格,=则表达式将不起作用。

我认为它应该看起来更像,(?<=\$table_prefix(\s*\=\s*\'))(.*)?(?=\')但这当然行不通。

有人可以简要解释一下进行这场比赛的更优雅的方式吗?

0 投票
3 回答
1248 浏览

javascript - Javascript 中的特定正则表达式正面外观(周围|前面|后面)

我正在寻找匹配/(?=\W)(gimme)(?=\W)/gi或类似的东西。\W应该是零宽度字符来围绕我的实际匹配。

也许有些背景。我想用添加的一些文字填充替换某些单词(always \w+),但前提是它没有被 a 包围\w。(这听起来像是一个消极的环顾四周,但我听说 JS 不这样做!?)

(顺便说一句:上面的“给我”是我想替换的字面量。如果这不明显的话。)

它必须是(?)环顾四周,因为\W必须是零宽度,因为意图是 a.replace(...)并且我不能替换/复制周围的字符。

所以这行不通:

必须忽略零宽度字符,因此该函数只能返回(和替换 doMagic(match)

我只有非常有限的环视经验,在 JS 中没有。格拉齐。

PS。或者,也许我需要回顾一下,而 JS 不支持这些..?我很困惑?

PS。一点上下文: http: //jsfiddle.net/rudiedirkx/kMs2N/show/(哦一个链接!)

0 投票
1 回答
223 浏览

php - 为什么 $ 在这个正则表达式中不匹配?

我有以下行,用于分隔 GIF 文件中的帧:

如果您熟悉 GIF 文件格式,您可能会注意到其中的一个主要缺陷 - 它不会检测最后一帧,因为前瞻仅针对帧头。

相反,如果我将正则表达式更改为:'/(?P<frame>\x00\x21\xF9\x04.(?P<delay>..).\x00\x2C.*?)(?=\x00\x21\xF9\x04|\x3B$)/s\x3B文件终止符在哪里(后面是文件/字符串的实际结尾),整个事情都会失败,它甚至不能匹配一次。

我已经在 Kodos中对此进行了测试,但由于这是二进制数据,我能做的最好的就是纯文本等价物,它完全符合预期。该函数preg_match('/\x00\x3B$/', $fileContents) 确实匹配,并且在十六进制编辑器中对文件的分析确认它的布局是应该的。

那么,为什么添加|\x3B$前瞻会使其完全失败?

注意:是的,有一些用于处理 gif 图像的库。这个问题纯粹是关于过程,而不是最终结果。

编辑:我注意到管道空间实际上可能不是问题;正则表达式很乐意匹配\x00\x21\xF9\x04 or \x3B(这没有用,因为\x3B在整个文件中多次单独出现)。管道空间之后的多个字符似乎出现了问题......有点。\x3B$并且\x00\x3B都会导致整个正则表达式失败。但是,无论如何,仅寻找 $ 都会失败。这似乎是 $ 锚的问题,而不是其他任何问题,尽管这显然不是这里唯一的问题。

导致0个匹配的排列:

0 投票
2 回答
583 浏览

regex - JavaScript RegEx,与 OR 的零长度匹配(向前和向后看,也许)

我有这个正则表达式/\b\d\b/,可以简单地匹配一个数字单词。

现在我想添加下划线字符作为单词边界的替代,所以我也想匹配数字"_1_",同时保持下划线为零长度匹配(如 \b,所以我不想要比赛中的_)。

我的情况是使用捕获组并不理想。

我尝试了一些积极的向前/向后的技巧,向前看似乎有效,而向后看却没有。尝试做可选的向前/向后看,并做类似的事情_|\b,但我找不到一个理想的解决方案。

由于对高级正则表达式技巧不是很了解,我想在使用 2 个正则表达式之前先问一下 :)

这将在 JavaScript 中执行。

0 投票
2 回答
122 浏览

regex - 如何有效地匹配 Perl 正则表达式中已经匹配的内容?

我编写了一个正则表达式来验证必须遵守以下规则的字符串:

  1. 必须至少为一个字符
  2. 不得包含空白字符
  3. 第一个字符不能是标点符号
  4. 最后一个字母不能是标点符号
  5. 不能以标点符号结尾,后跟数字
  6. 所有其他字符可以是除/[:@#].

这是正则表达式:

看到有什么遗漏吗?不执行规则#5。我一直在通过编写如下代码来执行它:

有很多地方我必须这样做,所以我宁愿这一切都在一个正则表达式中完成。问题是:如何?什么正则表达式会拒绝诸如“foo,23”之类的值?

0 投票
2 回答
309 浏览

regex - 带有特殊字符的正则表达式环视无效?

我正在尝试这个正则表达式

在这个文本上 John James Taylor

但我在这里http://www.rubular.com/r/TjD2d4oG5z得到“后向无效模式”

我正在尝试匹配前面没有 John 或 Joe 的“Taylor”。

请问有什么提示吗?