问题标签 [regex-lookarounds]

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 投票
2 回答
1035 浏览

asp.net - 正则表达式负前瞻

我有一种情况,我需要在 VS 项目中搜索任何没有定义 MaxLength 属性的控件。

例如:

有没有人建议使用正则表达式模式来查找未定义 MaxLength 的控件?

我的第一次尝试似乎有效,但充其量似乎并不完美......

我很想看到一个更好的解决方案。

注意:Visual Studio 搜索阻塞了我上面的模式。我被迫使用不同的应用程序来实际使用这种模式进行搜索

0 投票
1 回答
12923 浏览

java - 具有前瞻功能的 Java 正则表达式

有没有办法在java中打印出正则表达式模式的前瞻部分?

这个片段打印出来:

你好
世界


我想要做的是成对打印单词:

你好世界
世界这

例子

我怎样才能做到这一点?

0 投票
3 回答
4746 浏览

python - 负前瞻正则表达式贪婪(为什么.*?太贪婪)

我无法理解负前瞻正则表达式的细节。在阅读了Regex lookahead、lookbehind 和 atomic groups之后,当我发现这个描述时,我以为我对负前瞻有了一个很好的总结:

(?!REGEX_1)REGEX_2

仅当REGEX_1不匹配时才匹配;检查后REGEX_1,搜索REGEX_2从同一位置开始。

希望我理解算法,我编造了一个两句测试侮辱;我想找到没有某个词的句子。具体来说...

侮辱: 'Yomama很丑。而且,她闻起来像一条湿狗。

要求

  • 测试 1:返回一个没有“丑陋”的句子。
  • 测试 2:返回一个没有“looks”的句子。
  • 测试 3:返回一个没有“气味”的句子。

我将测试词分配给$arg,并用于(?:(?![A-Z].*?$arg.*?\.))([A-Z].*?\.)执行测试。

  • (?![A-Z].*?$arg.*?\.)是否定前瞻来拒绝带有测试词的句子
  • ([A-Z].*?\.)至少匹配一个句子。

关键部分似乎在于理解正则表达式引擎在处理负前瞻后开始匹配的位置。

预期结果

  • 测试 1 ($arg = "ugly"):“而且,她闻起来像一条湿狗。”
  • 测试 2 ($arg = "looks"): "Yomama 很丑。"
  • 测试 3 ($arg = "smells"): "Yomama 很丑。"

实际结果

  • 测试 1 ($arg = "ugly"):“而且,她闻起来像一条湿狗。” (成功)
  • 测试 2 ($arg = "looks"): "Yomama 很丑。" (成功)
  • 测试 3 ($arg = "smells"):失败,不匹配

一开始我以为Test 3失败([A-Z].*?\.)是因为太贪心,两个句子都匹配;但是,(?:(?![A-Z].*?$arg.*?\.))([A-Z][^\.]*?\.)也没有用。接下来我想知道python负前瞻实现是否有问题,但perl给了我完全相同的结果。

最后我找到了解决方案,我不得不.*?通过使用来拒绝我的部分表达式中的句点[^\.]*?;所以这个正则表达式有效:(?:(?![A-Z][^\.]*?$arg[^\.]*?\.))([A-Z][^\.]*?\.)

问题

但是,我还有另一个担心;“Yomama很丑。” 里面没有“气味”。那么,如果.*?应该是非贪婪匹配,为什么我不能用 完成测试 3 (?:(?![A-Z].*?$arg.*?\.))([A-Z].*?\.)

编辑

鉴于@bvr 对使用的极好建议-Mre=debug,我会在下班后考虑更多。看来赛斯的描述在这一点上是准确的。到目前为止,我学到的是负前瞻表达式将尽可能匹配,即使我.*?在 NLA 中放置了非贪婪运算符。


Python 实现

Perl 实现

输出

0 投票
1 回答
241 浏览

javascript - javascript中的正则表达式前瞻问题

我只在所有以空格分隔的单词都长于 3 个单词字符时才尝试匹配(3 个单词字符是强制性的,abc* 是正确的,但 ab* 不是)。这是我的测试:

所有文本都匹配,但我相信没有一个应该匹配。也许我误解了前瞻工作原理的一些基本原理。

0 投票
1 回答
193 浏览

regex - 如何使用前瞻进行分组和引用

在这个例子中:

,由正则表达式匹配^(?!.*(Chapter|Part)).*\n\("Chapter.*\n,我想要两组("Talking with Bengt Holmstrom 1" "#44")("Chapter 1 What is Economics? 3" "#46")

为了分组,上面的正则表达式被修改为^((?!.*(Chapter|Part)).*)\n(\("Chapter.*)\n. 我想引用这两个组,但是像 in 那样使用\1and\2作为他们的引用是\1\2行不通的。我想知道有什么问题吗?

顺便说一句,我正在使用 gedit 正则表达式插件。

谢谢!

0 投票
1 回答
243 浏览

perl - 正则表达式前瞻和/或后瞻错误

$line = '鲍勃从来没有说过每一个遐想都是好的';

寻找:仅匹配和捕获“ever”这个词。使用lookahead 和/或lookbehind 断言这样做。

替换:使用您喜欢的任何机制从行中删除单词“ever”及其后面的空格。

Extra-Credit:使用您想要的任何机制将字符偏移量获取到单词“ever”的字符串中。

我已经写好了试卷。但我不是通过。这些答案有什么问题?

0 投票
7 回答
50137 浏览

javascript - 负前瞻正则表达式

我想匹配所有以“.htm”结尾的字符串,除非它以“foo.htm”结尾。我通常对正则表达式很满意,但消极的前瞻让我很难过。为什么这不起作用?

我应该改用什么?我认为我需要一个“消极的看法”表达(如果 JavaScript支持这样的事情,我知道它不支持)。

0 投票
1 回答
577 浏览

python - 前瞻断言

我正在尝试使用 Python 中的正则表达式匹配有效域名中的标签:

我正在尝试使用肯定和否定断言来避免标签开头或末尾的连字符。

但字符串 "-asdf" 仍然匹配: e.match(DOMAIN_LABEL_RE, "-asdf", re.VERBOSE).group()

我不明白为什么它仍然匹配。

谢谢你的帮助。

M。

0 投票
1 回答
3477 浏览

python - 前瞻和非捕获正则表达式

我正在尝试将@字符之前的电子邮件地址的本地部分与:

测试:

给出:

为什么@在输出中打印,即使我使用的是非捕获组(?:@)

测试:

给出:

为什么正则表达式不拒绝带有一对点的字符串'..'

0 投票
2 回答
1304 浏览

java - 模式前瞻

但我需要字符串“mad”在第二组。