问题标签 [negative-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 投票
2 回答
1046 浏览

regex - vim中的正则表达式否定

在 vim 中,我想使用正则表达式突出显示以字母结尾的每一行,该字母前面没有//noor :。我尝试了以下

这对注释非常有效,但不适用于包含冒号的行。知道为什么吗?

0 投票
1 回答
229 浏览

php - URL 检测和 BB 样式标签(正则表达式、前瞻问题)

所以我正在构建一个小型 CMS,我想避免在内容编辑器中允许 HTML。出于这个原因,我想检测文本中的原始 URL 以及支持类似 BB 的标签,以便更好地定制。

不幸的是,我对正则表达式还很陌生,我似乎无法让它工作。我在字符串上运行了两个正则表达式:第一个检测原始 URL,第二个检测类似 BB 的 URL。后者似乎工作得很好,但第一个会干扰,并且也会转换包含在标签中的 URL。

我从在这里找到的一段代码开始,并做了一些补充。

这是非标记 URL 的代码:

之前的负面后视www.是因为/不是单词字符,没有它就像

之后仍然会匹配http://

上面的正则表达式产生以下匹配(用http://gskinner.com/RegExr/测试,匹配以粗体显示。我必须在后面添加空格,http://因为我不允许发布更多 URL):

www.example.com
http:// www.example.com
http://example.com
[链接http://www.example.com]没问题 1[/link]
[链接 www.example.com]没问题2[/link]
[链接http://www.example.com] http://www.example.com[/link ]

我尝试移动负面的前瞻性并使用括号(非常漫无目的),但没有成功。

为了完整起见,这是标签匹配的正则表达式(似乎有效):

我相信有人可以立即发现错误。

提前非常感谢!

0 投票
2 回答
370 浏览

java - 是否可以在正则表达式 java 中定义前瞻范围?

我想在 java 中使用负前瞻,但我不能仅将它应用于文本的某些部分。它从光标处一直使用到结尾。有可能以某种方式做到吗?

一个例子:我有一个不定的'ab'围绕它的字符串:ababJJJababab

我希望只对没有“ab”的中心部分进行分组(即 JJJ)。所以这是我的正则表达式:

问题是负前瞻超出了它的容器组并试图避免'ab'直到文本结束(这将导致根本找不到任何匹配项)。请注意,我的实际问题要复杂得多,我并不是在寻找解决这个特定示例的方法。有没有办法分配某种边界来定义正则表达式中的前瞻范围,避免将其应用于文本的其余部分?

提前致谢 ...

0 投票
1 回答
1126 浏览

.net - 如何对整个捕获组应用负前瞻?

给定以下正则表达式和主题文本,为什么负前瞻仅适用于命名捕获组的最后一个字符URL

这个正则表达式有一个否定的前瞻(?!"|(</a)),它试图不匹配<a>标签内的 URL。这是通过检查 URL 是否后跟引号 ('") 或结束</a标记来完成的。

我得到以下结果

我预计负前瞻适用于整个捕获组,而不仅仅是最后一个字符。这可能吗?我究竟做错了什么?我希望只匹配http://example.com要捕获的最后一个实例。

0 投票
1 回答
14475 浏览

regex - 如何在正则表达式中使用负前瞻来删除不需要的行

我需要有关使用负前瞻的帮助。我正在使用记事本++,我想删除除包含的行之外的所有行<title>(.*)</title>

我尝试了几件事,但没有奏效。

0 投票
1 回答
12063 浏览

regex - POSIX正则表达式:排除表达式中的单词?

我正在尝试使用可在 C 程序代码中使用的 POSIX(扩展)正则表达式创建正则表达式。

具体来说,我想出了以下内容,但是,我想在匹配的表达式中排除“http”这个词。经过一番搜索,POSIX 看起来并不明显可以捕获特定的字符串。我在下面的示例中使用了一种称为“负面观察”的东西(即(?!http:))。但是,我担心这可能仅适用于 POSIX 以外的方言中定义的正则表达式。是否允许负前瞻?POSIX 中是否允许使用逻辑 NOT 运算符(即!)?

工作正则表达式示例:

href|HREF|src[[:space:]]=[[:space:]]\"(?!http:)[^\"]+\"[/]

如果我不能像在其他方言中那样使用否定前瞻,我可以对上面的正则表达式做些什么来过滤掉特定的单词“http:”?理想情况下,有没有什么方法没有逆逻辑并最终在这个过程中创建一个可笑的长正则表达式?(我上面的那个已经很长了,如果可能的话,我希望它看起来不会更混乱)

[注意:我已经咨询过 Stack Overflow 中的其他相关主题,但最相关的主题似乎只是“一般”地问这个问题,这意味着给出的答案并不一定意味着它们是 POSIX 风格的 ==> 在另一个或两个线程中,我已经看到了上面的 (?!insertWordToExcludeHere) 负面预测,但我担心它只适用于 PHP。)

[注 2:我也会采用任何 POSIX 正则表达式短语,我们将不胜感激。有没有人对过滤掉“http:”的正则表达式的外观以及它如何适合我当前的正则表达式提出建议,替换(?!http:)?]

0 投票
1 回答
393 浏览

c# - 正则表达式匹配具有混合 C# 代码的字符串中的 NC 注释

我有一个混合了 NC 代码和 C# 代码的文本文件。C#-代码以“<#”开头,以“#>”结尾。现在我需要一个正则表达式来查找所有 NC-Comments。一个问题是 NC-Comments 以“;”开头 因此我遇到了一些问题来区分 NC-Comment 和“;” C#-代码。

是否可以仅使用一个正则表达式来实现这一目标?

正则表达式的结果应该是 {1. NC-评论,2.评论,3.评论}

我玩过以下正则表达式:

一种解决方案可能是将每个“<#”推入堆栈并从该堆栈中弹出每个“#>”。因此,如果堆栈为空,则当前字符串为 NC-Code。接下来我必须找出这个字符串是否是 NC-Comment。

0 投票
1 回答
370 浏览

python - 使用正则表达式匹配所有非 URL 向前看

在 Python/django 中,我有一个字符串,我通过匹配 ':' 字符之前的字符来从中提取“标题”,例如:

所以我使用这段代码来提取标题:

当用户在字符串中只输入一个 url 时会出现问题,例如:

我更喜欢只返回一个空字符串。我尝试使用负面的前瞻性元标记(?!):

但它仍然返回 'http' 而不是空字符串。应该如何?

0 投票
2 回答
218 浏览

java - 如何获得不匹配的模式:正则表达式后面没有另一个正则表达式

这显然是一个简化的情况,但需要的是一个不匹配aabb|bbaa但可以正常工作的正则表达式aabb(不跟随|...)。

像这样的正则表达式[ab]+(?!\|[ab]+)*非常接近,但它仍然匹配aabbfrom ,而在这种情况下aabb|bbaa我想根本不匹配。

不允许使用字符串开头 ( ^) 和字符串结尾 ( ) 锚点。$

0 投票
1 回答
177 浏览

regex - 带有负前瞻的 Perl 正则表达式的行为异常

我正在尝试将 /ezmlm-(除 'weed' 或 'return')\s+/ 与正则表达式匹配。下面演示了一个做正确事情的 foreach 循环,以及一个几乎可以做的尝试的正则表达式:

示例程序的输出如下:

在最后一个例子中,正则表达式失败,匹配一个愚蠢但合法的电子邮件地址。如果我修改正则表达式,在负前瞻模式之后放置一个 \s,如下所示:

正则表达式根本不匹配。我认为它与负面模式的工作方式有关。我试过让否定变得不贪婪,但似乎有一些隐藏在“perldoc perlre”中的教训正在逃避我。是否可以使用单个正则表达式来做到这一点?