问题标签 [negative-lookbehind]

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 回答
56 浏览

regex - How can I use regex to match both single word strings and hyphenated strings?

I am trying to match the first word after a specific string using regex and have been struggling to make all instances work properly. Let's say I have 2 strings:

Site Code: foobar

Site Code: hello-world

Now, using (?<=\bSite Code:\s)(\w+) returns foobar which is correct, but only returns hello when I need hello-world instead.

So, I changed my expression to (?<=\bSite Code:\s)(\w+)(-\w+) in order to pickup the hyphenated words, but now it is ignoring the non-hyphenated words.

Is there a way to get both foobar and hello-world from the same expression?

0 投票
3 回答
151 浏览

php - 在量化的空白处停止负面回顾?

我需要插入<p>标签来包围 HTML 片段中的每个列表元素。这不能创建嵌套段落,这就是为什么我想使用前瞻/后瞻断言来检测内容是否已经包含在段落标签中。

到目前为止,我已经想出了以下代码。

此示例使用否定的lookbehind 断言来匹配每个</li>结束标记,该结束标记前面没有</p>结束标记和任意空格:

令我惊讶的是,结果如下:

开始标签的插入按预期工作,但请注意在最后一个列表元素中插入的附加标签!</p>

有人可以解释为什么\s*当使用否定后向断言时,正则表达式中的空格 () 会被完全忽略吗?

更重要的是:我还能尝试什么来实现上述目标?

0 投票
1 回答
153 浏览

regex - 可以在 Phing replaceregexp 任务中使用否定的lookbehind吗?

尝试将否定的后向正则表达式放入 Phing replaceregexp 任务并收到错误:

我看到尖括号是 xml 中的一个问题。有没有办法在构建文件中指定一个负的后向正则表达式,或者这是一个自定义任务的东西?

我的目标是将文件中的引用重命名为“.js”,同时保留所有现存的“.min.js”引用,使用类似的东西:

0 投票
3 回答
5432 浏览

regex - R中的正则表达式,带有否定的向后看

所以我有以下数据,比如说“my_data”:

我想要的是分类 my_data$Storm.Type 中的每个元素是否是风暴,但我不想将热带风暴包括为风暴(我将分别对它们进行分类),这样我就有

我写了以下代码:

但这只会将“严重风暴”作为风暴返回(但忽略了 SNOWSTORM 和 HIGH WINDS)。谢谢!

0 投票
2 回答
531 浏览

regex - 使用 RegEx 查找不在另一个单词之后的单词

为了匹配不在另一个特定单词之后的特定单词,我应该使用什么正则表达式模式?

例如:

我正在寻找不在“xyz”之后的“abc”,因此以下内容将匹配:

以下不会:

谢谢!

0 投票
1 回答
251 浏览

regex - 无法使用负前瞻的正则表达式来修复 JSON 中的未转义引号

我有一些以下格式的 JSON 代码:

我需要在“NAME”中的引号前添加反斜杠才能正确解析此 JSON。所以我需要上面的字符串看起来像这样:

我尝试使用正则表达式替换(?!({ |": |", ))"(?!( }|: "|, "))'\\\\"',但我得到:

请帮助编写正确的正则表达式。

0 投票
3 回答
1498 浏览

php - preg_match 负向后看

我正在尝试使用 preg_match 解析 PHPDoc 标签,但我遇到了一些负面的后视问题。我以前从未使用过这些,但我的理解是它们被用作排除项。

这是我的模式:

/\*\*.+?(?<! \*/)@access public.+? \*/\s+?function\s+[a-zA-Z0-9_]+\(

这是我试图解析的示例 PHP 文件:

我想用@access public 标记匹配任何函数,但在这种情况下,匹配从 DS 常量的注释开始。我认为(?<! \*/)会排除它与 DS 评论的结束评论标签匹配。

我错过了什么?

0 投票
1 回答
239 浏览

python - 后视中具有不同长度“或”的python正则表达式

我有很多带有命令的日志。我过滤了所有带有“useradd”的日志,但现在我想丢弃一些误报:

  • ... /etc/default/useradd ...
  • ... .../man8/useradd ...

问题是我想在其中看到带有误报和真实命令的行(请参阅测试用例)。

我只能使用(一个或多个)python 正则表达式,因为我正在使用日志分析程序——所以没有真正的 python 程序。这些是我尝试过的表达方式:

在回答其他问题时,更改了正则表达式,以便可以使用前瞻 - 但我不明白这是怎么可能的。

[编辑:添加了一些测试用例]

0 投票
2 回答
202 浏览

regex - 正则表达式负回溯 - pcre

我正在尝试编写一个规则来匹配顶级域,后跟五位数字。我的问题出现了,因为我现有的 pcre 与我所描述的内容相匹配,但在 URL 的后面很晚,然后在我想要的时候。我希望它在 TLD 的第一次出现时匹配,而不是在其他任何地方匹配。检查这一点的简单方法是在 TLD 之前没有出现“/”字符时匹配它。我尝试使用negative-lookbehind,但这不起作用,因为它只能回顾一个字符。

例如:它目前的工作方式

匹配 .com/12345 即使我不想要这个匹配,因为它不是 URL 中的第一个 TLD

例如:我希望它如何工作

在 .net/12345 上匹配并忽略 .com/12345 上的后续匹配

我现在的表情

编辑:重写它,所以如果将来有人遇到同样的问题,问题可能会更清楚。

0 投票
3 回答
894 浏览

regex - Perl 正则表达式 - 用 # 替换字符串中的所有数字,除非它们有特定的前缀

我正在尝试用“#”替换字符串中的所有数字,前提是它们没有特定的前缀。这些数字可以作为单词的一部分出现,也可以单独作为单词出现。

例如,使用 ABC 作为前缀,这是想要的结果。

输入:

结果(请注意,第 2,3 行的 ABC 带有数字):

我试图用 regexp: 后面的负面外观来做到这一点s/(?<!ABC)\d+/#/g。在这种情况下,只有 ABC 之后的第一个数字不会被替换,其余的都会被替换。

我的下一步是将字符串拆分为包含 的部分,ABC\d+并对其他部分执行简单的替换。

将不胜感激任何建议如何在不拆分为多个字符串的情况下完成整个事情。

谢谢!

编辑 1:将 aac 移回正确位置。编辑 2:我正在使用 perl 5.8.5,以防万一。由于与我无法控制的代码的兼容性问题,我无法更新到较新的版本。