问题标签 [positive-lookahead]

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 投票
0 回答
88 浏览

javascript - 理解 JavaScript 中的正向前瞻和回溯

我无法完全理解在 JavaScript 中结合积极的前瞻和回溯。我阅读了这个答案以及这篇文章,并使用https://regex101.com/进行了一些测试,但并没有完全得到我期望的结果。

所以给定测试字符串香蕉12,以下工作:

  • (?=\d{2,})- 断言字符串至少包含两个数字
  • (?=[a-z]{5,})- 断言字符串至少包含五个小写字符

这两个条件适用于banana1212banana

但是,当我尝试将两者结合起来时(?=\d{2,})(?=[a-z]{5,}),我没有得到匹配。为了在使用banana12时获得匹配,我需要添加\D*到 digit-testing lookahead: (?=\D*\d{2,})(?=[a-z]{5,})

为什么不起作用(?=\d{2,})(?=[a-z]{5,})

如果我将测试字符串更改为12banan,要获得匹配,我需要使用:(?=\d{2,})(?=[^a-z]*[a-z]{5,})- 所以这次没有回溯数字,回溯小写字母。

所以一般来说,如果我想确保我的正则表达式正确匹配两个字符串(12bananabanana12),我需要使用:(?=\D*\d{2,})(?=[^a-z]*[a-z]{5,})

为什么?如果两个前瞻都单独工作,为什么它们不组合工作,为什么需要添加回溯?

0 投票
0 回答
32 浏览

regex - 使用正则表达式的字符串中的总排除/包含

我一直在阅读这篇文章在正则表达式中只返回一个带有 OR 条件的组,以了解如何在匹配中只获得一个组。不知何故,这对我的模式不起作用。

这是使用的字符串:

目前,它提取每次出现的数量。有没有办法只获取后面的值[Tt]otaa?l excl/incl BTW

我想我一直在错误地使用正/负前瞻。

给定输入的期望输出是:

演示

正则表达式

0 投票
2 回答
136 浏览

python - 如何使用肯定的lookbehind断言从单词“named”之后的字符串中提取子字符串

我有一系列来自推文的熊猫文本。这些推文是关于狗的。一些推文包含狗的名字。该名称以下列方式显示。“...blah blah blah name .blah blah blah ...” 我需要的作品前后的字符数未知。我想提取name

我相信我需要使用积极的后向断言和正则表达式的搜索选项。我查看了 re.search 的文档以及以下 SO 问题:如何提取两个标记之间的子字符串?正则表达式以正向后视 (python)以及本教程https://www.rexegg.com/regex-lookarounds.html捕获组。我还是觉得卡住了。

这是我到目前为止的两个想法:

一个)

二)

根据文档,A) 应该返回“Cheryl”,但我得到一个属性错误:AttributeError: 'NoneType' object has no attribute 'group'.

B)仅适用于系列,并且并非推文系列中的每个元素都包含“...命名名称”。结构体。我不确定如何将其合并到代码中,以便返回 Cheryl。

0 投票
1 回答
104 浏览

javascript - 将标签外的所有文本包装在另一个标签中

我的 html 看起来(有时看起来)像这样:

我需要将这些标签中的每个单词都包含在 span 中。所以被包装的词会是 Some, text, some, more, text, a, little, bit, more, text。我尝试使用此代码:

其中 filter 是一个自定义函数,使用它我可以轻松地包装每个单词。然而,结果证明 (?<=>),一个积极的后向,在 ios 中尚不支持。我的正则表达式真的很糟糕,所以我请求你的帮助。上面的代码有没有得到很好支持的替代方案?

0 投票
1 回答
967 浏览

logstash - Grok 自定义模式中的 Lookahead 和 Lookbehind 语法

我正在尝试在 Grok 自定义模式中使用后向和前瞻,并在 Grok 调试器中获取我无法解决的模式匹配错误。

这是用于归档系统日志。我目前正在尝试解析 postgrey 应用程序。

给定数据,例如:

我正在尝试使用以下内容将“action =”和紧随其后的逗号作为字段“postgrey_action”之间的字符串拉出:

我希望看到以下输出:

相反,从调试器中,我收到“提供的 Grok 模式与输入中的数据不匹配”。

我怎样才能正确地使这种后向/前瞻工作?

编辑:我应该注意,在 Grok 模式末尾没有 postgrey_action 匹配,Grok 调试器会按预期运行和工作(使用 linux-syslog 和 grok-patterns)。

Logstash 版本 6.3.2

0 投票
1 回答
1093 浏览

regex - 正则表达式前瞻逻辑“或” - 排除某些模式

我已经看到了很多执行逻辑 AND 的密码验证示例。例如,密码必须有

  • 至少一位数 (AND)
  • 至少一个字符 (AND)
  • 长度在 6 到 15 之间

这可以用正则表达式 'positive lookahead' 写成:

我的问题是我想排除某些组或模式,本质上是做一个逻辑“或”;例如,假设我想匹配(如果以下任何一项为真,则使密码无效):

  • 至少找到一个空间(或)
  • 至少找到一个单引号 (OR)
  • 至少找到一个双引号 (OR)
  • 野兽的字符串“666”号

在 excludePattern 上寻求帮助 .. 积极前瞻?负前瞻?

我正在使用 c# 正则表达式,但任何风格都可以开始。

0 投票
1 回答
90 浏览

php - 正向前瞻与阿拉伯语文本不匹配

使用前瞻断言时,正则表达式与阿拉伯文本不匹配

我正在尝试拆分文本:

شكرا لك على المشاركة في هذه الدراسة。هذا الاستبيان يطلب معلومات عن:

存储在

使用正则表达式:

在功能上

正则表达式不匹配。如果我删除前瞻断言,它确实匹配。

为什么会这样?什么可能是解决方法?

0 投票
0 回答
40 浏览

regex - 无法解释我认为是一个稍微简单的正则表达式......(正面向前看 - 正面向后看)

以下正则表达式的结果有点麻烦,匹配以下文本。我通常使用 regex101.com 帮助我快速查看正则表达式的输出,但这次 Regex101 和 Python 没有就相同的输出达成一致……我不知道为什么。

我正在解析的示例文本:

我只是在 (missing = \d(1,2}) 处进行拆分,同时包括模式。所以到目前为止,我已经尝试了几个不同的后视和前瞻。

尝试的模式:

  1. .+?(?=\= ..)
  2. .+?(?<=\= ..)
  3. (?=\d{2}\%).+?(?<=\= ..)

根据要求,链接到我目前正在尝试的内容: https ://regex101.com/r/JgaZ1n/1 https://regex101.com/r/JgaZ1n/2

reg=re.compile(r'.*?(missing = \d+)') reg.findall('82% (37)\n31% (14)\n(missing = 8)\n76% (34)\n33 %...ETC...')

我希望 are.findall()首先返回82% (37)\n31% (14)\n(missing = 8)....其他人,依此类推,但通常什么也得不到,或者只是其中包含的内容(缺少\d)。任何见解为什么?

谢谢阅读。

0 投票
1 回答
161 浏览

python - 正则表达式 python - 仅当换行符后跟数字或特殊字符和空格时才匹配换行符

我一直试图在 Python 中找出这个正则表达式,但它没有产生预期的结果。

我有一个我加载的文本文件,格式如下:

我想得到以下输出:

我正在尝试将我的字符串拆分为 1) 一个新行后跟一个数字,或 2) 一个新行后跟一个特殊字符,前提是它后跟一个空格(例如“!但在此处拆分”,但不是'!不要在这里分裂')。

这是我到目前为止所拥有的:

这很接近,但还没有。这是它产生的输出:

它错误地单独匹配特殊字符:'!' 和 '*' 有自己的元素。正则表达式中有两个前瞻运算符。

如果您能帮助确定我可以使用此正则表达式更改的内容以使其不匹配单个特殊字符,并且只匹配特殊字符后跟整行,我将不胜感激。

我也对替代品持开放态度。如果有更好的方法不涉及两个前瞻,我也有兴趣了解解决此问题的其他方法。

谢谢!

0 投票
1 回答
13 浏览

regex - 从正则表达式正面查找匹配中提取最后 3 个字符

我有以下正则表达式^.*?(?=\.),我正在寻找修改它,以便我可以从给定路径中提取 3 个字符的国家代码(粗体)。现在正则表达式只是在句点之前创建一个组。

/path/to/folder/Conclusions_Pakistan_2019-09-13_PAK.pdf _ _

正则表达式101链接: https ://regex101.com/r/FGjqSl/1