问题标签 [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 投票
1 回答
54 浏览

regex - 了解后视

我将正则表达式 => 和主题字符串 => USD100 放入在线测试仪中 .{3}(?<=USD\d{3}),这将返回 100。我想知道正则表达式引擎在这种情况下是如何工作的?正则表达式引擎如何返回这 100?

正则表达式:.{3}(?<=USD\d{3})

主题:100美元

回报:100

0 投票
0 回答
1554 浏览

java - 解析 YAML 列表的正则表达式

我有一个这样的 YAML 列表,需要用 Java 中的正则表达式对其进行解析:

最后我想迭代列表文本块。这意味着在创建 Pattern 实例之后,我希望此文本的 Matcher 实例找到两个匹配项:

1.

2.

忽略列表名称(上面的“堆栈”)时,我可以执行以下操作:

使用此表达式生成的匹配器将找到我需要的两个匹配项。

但是,我实际上不想忽略列表名称,我想声明“在以下列表名称之后获取所有列表元素”(如方法调用getListData(yamlData, listName))。看来我需要一个积极的向后回顾。不幸的是,我没有找到办法在仍然获得两场比赛的同时做到这一点。你有什么主意吗?

(我知道有snakeyaml等库,可惜这里需要用到正则表达式。)

编辑:我不能对所列对象的元素顺序做出任何假设。解决方案必须能够处理交换的名称和文件夹(可能还有其他)。

0 投票
2 回答
1864 浏览

python - 积极的后视与非捕获组:不同的行为

我在代码中使用了 python 正则表达式(re模块),并注意到这些情况下的不同行为:

我需要得到的只是['xyz', 'abc']. 为什么这些示例的行为不同以及如何获得所需的结果?

0 投票
1 回答
84 浏览

python - 带有要提取的匹配组的正向后视

这会产生:invalid group reference.

使替换 take only \\1, only extracts envelope,这让我认为后视被忽略了。有没有办法从lookbehind中提取一些东西?

我期待制作:

0 投票
1 回答
698 浏览

ruby - Ruby 后向断言 (1.9/2.0) 中是否存在错误?

为什么正则表达式不(?<=fo).*匹配foo(而匹配(?<=f).*)?

这似乎只发生在单行模式打开(点匹配换行符);没有它,一切正常:

在 Ruby 1.9.3 和 2.0.0 上测试。

在 Rubular 上查看

编辑:更多观察:

添加行尾锚不会改变任何东西:

但与惰性量词一起,它“起作用”:

编辑:还有更多观察:

.+与它的等价物一样工作{1,}但仅在 Ruby 1.9 中(在这种情况下,这似乎是两者之间唯一的行为差异):

在 Ruby 2.0 中:

.{0,}被破坏(在 1.9 和 2.0 中):

{n,m}适用于两者:

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 投票
3 回答
272 浏览

ruby - 如何使用正则表达式匹配前面没有“=”的单词?

我想从 Ruby 中的 Fortran 代码中提取符号。这些符号将具有以下模式(注意:变量类型和属性部分已被过滤掉):

我尝试过的正则表达式是((?<!=)\w+(?![^\[]*\]+)(?=( |,|\(|$)))lookaround东西的。但由于 的限制lookbehind,我无法匹配“= *”来排除b

我使用 Rubular 进行测试。为了您的方便,请参见此处

提前致谢!

0 投票
1 回答
686 浏览

regex - 正则表达式后向匹配括号中的单词前面的表达式

是否可以使用 Regex lookbehind 表达式来匹配方括号中前面的所有单词,在此示例中匹配单词consecteturlibero ?

Lorem ipsum dolor sit amet, consectetur [adipiscing] 精英。Nunc eu Tellus vel nunc pretium lacinia。Proin sed lorem。疯狂的 ipsum。Nunc a libero [quis] risus sollicitudin imperdiet。

我想将 MS Word 中的字典条目与条目内容分隔开。条目后面是方括号中的音标,一旦以这种方式选择它们,我会增加它们的字体,从而使它们与文本的其余部分区分开来,并与内容分隔开。

编辑:肯特给出的表达与单字条目完美搭配,例如:

沸腾 ['boilin] adj 1. vreo, uzavreo, kipući 2. razjaren, uzrujan

带有连字符的两个单词条目,例如:

沸点 ['沸点] s vrelište

但是短语动词和其他两个词条目的第一个单词被省略了,这意味着在诸如以下的条目中:

栓出 ['bault'aut] vt isključiti; 伊兹拉努蒂

比赛结束,而不是因为我需要它。

由于这是一本字典,我可以分别为每个字母范围应用正则表达式,如果我有一个正则表达式来搜索以括号前面的特定字母开头的第一个单词,我将能够解决这个问题,匹配那个词和后面的词。对于我的示例中的“B”条目,这意味着该表达式将匹配以字母 B 开头的单个单词,将两个单词条目连字符作为沸点,并将匹配短语动词中的“ bolt ”,例如“ bolt out ” " 以及它后面的介词,即在这种情况下为“out”。

我的字典中可能只有少数(如果有的话)两个词的词条,这些词条中的词以相同的字母开头,我真的可以忍受这么小的误差。

EDIT2:我在方括号之前放置了分段符,现在我在上一行的末尾有我的条目,如下所示:

[aidwulf] s zool vrsta hijene (Proteles cristata) Aron 的胡须

[earanzrod] s bot divizma (Verbascum Thapsus) Abacca

[a'baid'on] vi biti na pomoći, stajati uz bok abide with

Aaron's beard是第二行以方括号开头的条目,Abacca是第三行以方括号开头的条目,依此类推。

为了解决我的问题,我需要两个正则表达式。首先,我需要一个正则表达式来匹配以 Aa 开头的单词中的每个字母 Aa,并且只匹配每行最后一个单词之前的单词。在我的示例中,在第一个示例中将匹配Aaron's中的A,在第三个示例中匹配a in abide。然后我会用星号替换这封信以获得*ron 的胡须*bide

第二个正则表达式将匹配每行中的每个最后一个单词(包括连字符的双单词复合)和我之前创建的以星号开头的单词。

感谢您的帮助。

0 投票
2 回答
1600 浏览

regex - 正则表达式,搜索和替换直到某一点

问题

我有一个文件充满了像

我想搜索和替换这样我得到

这 。转换为 / 直到第一个正斜杠

问题

如何编写正则表达式搜索和替换来解决我的问题?

尝试的解决方案

我尝试在 perl 中使用look behind,但是没有实现可变长度的look behinds

解决方法

实现了可变长度前瞻,因此您可以使用这个肮脏的技巧

这个问题有更直接的解决方案吗?

0 投票
2 回答
97 浏览

c# - 使用 Regex Look-Behinds 仅返回第一个匹配项

给定以下 XML 文档:

如何/>使用正则表达式返回第一个?到目前为止,我已经能够使用以下表达式非常接近:

但是,这将匹配/>第一次出现<myGoodSection. 我还尝试将它与消极的后视相结合,以使表达式不贪婪,但它似乎没有任何效果:

编辑:

我正在使用基于 C# 构建的工具来处理正则表达式替换。如果我直接使用,我无法控制我可以使用或不使用多少匹配System.Text.RegularExpressions项。我在这里引用 C# 来阐明我使用的引擎支持的功能。

是的,我知道作为一般做法,我不应该使用 RegEx 来解析 XML。让我们规定,鉴于我目前的范围、要求和约束,这是一个完全可以接受的解决方案(假设实际上有一种方法可以实现它)。