问题标签 [lookaround]
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.
.net - 可变长度后视中的平衡组
TL;DR:在 .NET 的lookbehinds 中使用捕获(特别是平衡组)会改变获得的捕获,尽管它不应该产生影响。.NET 的lookbehinds 是什么破坏了预期的行为?
我试图想出对另一个问题的答案,以此作为玩弄 .NET 平衡组的借口。但是,我无法让它们在可变长度的后视中工作。
首先,请注意,我不打算有效地使用这个特定的解决方案。这更多是出于学术原因,因为我觉得可变长度后视发生了一些我不知道的事情。并且知道将来当我实际上需要使用这样的东西来解决问题时,它可能会派上用场。
考虑这个输入:
目标是匹配所有字母,这些字母在括号内,前面有~
,不管有多深(所以从a
到i
)。我的尝试是在后视中检查正确的位置,以便我可以在一次调用中获取所有字母Matches
。这是我的模式:
在后视中,我尝试找到一个~(
,然后我使用命名的组堆栈Depth
来计算无关的左括号。只要在其中打开的括号~(
从未关闭,则向后查找应该匹配。如果到达了右括号,(?<-Depth>...)
则无法从堆栈中弹出任何内容,并且后向查找应该失败(即,对于来自 的所有字母j
)。不幸的是,这不起作用。相反,我匹配a
, b
, c
, e
, f
,g
和m
. 所以只有这些:
这似乎意味着一旦我关闭了一个括号,lookbehind 就无法匹配任何东西,除非我回到我之前去过的最高嵌套级别。
好的,这可能只是意味着我的正则表达式有些奇怪,或者我没有正确理解平衡组。但后来我尝试了这个,没有向后看。我为每个字母创建了一个字符串,如下所示:
并在其中的每一个上使用了这种模式:
并且根据需要,所有案例都匹配,其中替换和之后的所有案例z
之间的一个字母失败。a
i
那么(可变长度)lookbehind 做了什么打破了平衡组的这种使用?我整个晚上都试图研究这个(并找到了像这样的页面),但我在回顾中找不到这个的单一用途。
如果有人可以将我链接到有关 .NET 正则表达式引擎如何在内部处理 .NET 特定功能的一些深入信息,我也会很高兴。我发现了这篇很棒的文章,但它似乎并没有进入(可变长度)lookbehinds,例如。
regex - 由其他字符包围的正则表达式填充数字
我正在寻找一个正则表达式,它捕获由字符串模式包围的一系列数字,并用前导零填充该系列数字,最多 4 位。同时,应从整个字符串中删除所有空格。一些示例:“F12b”应该捕获“12”并返回“F0012b”“AB 214/3”应该捕获“214”并返回“AB0214/3”“G0124”应该捕获“0124”并返回原字符串不变
源字符串应遵循以下规则: - 应以 [a-zA-Z] 开头 - 在上述模式之后可以是任意数量的可选空格 - 数字序列后面可以跟另一个字符串 - 数字序列可以是任何位数。只有少于 4 位的序列才用前导零填充,否则保持不变。- 我只对字符串中的第一次出现感兴趣
我在这里发布这个问题是因为我没有经常使用 RegEx 来解决这个问题,但我知道这是 RegEx 的完美案例。非常感谢任何帮助,对表达式的解释肯定会帮助我理解它。
c++ - 展望未来不在 QRegExp 中工作?
我是 regexp 的新手,我正在尝试使用 QRegExp 中的前瞻断言功能来检查字符串的长度。这是一个非常简单的例子:
打印:“结果:假”。
我测试了这个正则表达式和这个网页上的字符串:http ://regexpal.com/ ,它显示匹配。
任何想法?提前致谢。
regex - 正则表达式,环顾后继续匹配
我在正则表达式中环顾四周时遇到问题。
这里的问题:我有一个要编辑的大文件,我想通过另一个保留第一个参数但删除第二个参数来更改一个函数。
假设我们有:
或者
我想改变:
func2(paramIWantToKeep)
在这两种情况下。
所以我尝试使用积极的前瞻
现在,我只是尽量不选择第一个参数(然后我会设法对括号做同样的事情)。
但它不起作用,看来我的正则表达式,在忽略正面展望(.+)之后寻找(, paramIDontWant\))
之后寻找与向前看之前相同的位置(所以左括号)
所以我的问题是,如何在匹配组之后继续正则表达式,在 (.+) 之后。
谢谢。
PS:对不起我的问题的英语和/或糟糕的结构。
编辑:我使用崇高文本
string - 字符串范围向前和向后环顾
我正在尝试编写一个脚本,该脚本从用户那里获取输入并在格式化区域中返回输入。我一直在使用该string range
功能,但它显然会在我给出的范围内削减输入。有没有办法在指定的范围内四处查看以找到下一个空格字符并在该位置剪切输入?
例如,如果我有以下输入:
我当前string range
的函数将输入格式化\r\n
为:
正如您在第 1adipisicing
行看到的那样,第 2 行的incididunt
单词已被截断。我正在寻找一种方法来寻找离该位置最近的空间。所以对于第 1 行,它会a
在第 2 行之前,它会在i
. …在某些情况下,它可能在单词之后。
这清楚我在找什么吗?任何帮助都会很棒!
regex - 正则表达式在一个搜索词之后和其他两个搜索词之一之前收集数据(哪个是第一个)
我需要塑造一个具有以下要求的正则表达式:
给定示例文本:
我想提取出现在该find this text
区域的字符串
SEARCH_TERM_#1
正则表达式应该在upto之后收集数据,但不包括SEARCH_TERM_#2
或SEARCH-TERM_#3
哪个先出现。无论在#2 和#3 中找到什么,它都应该选择作为“右侧”搜索边界。
我试过(?>SEARCH_TERM_#2|SEARCH_TERM_#3)
(?=(?>SEARCH_TERM_#2|SEARCH_TERM_#3))
和(?>(?=SEARCH_TERM_#2)|(?=SEARCH_TERM_#3))
。他们都将第二个搜索词包含在收集的数据中,并在第三个之前停止,而我希望收集的数据在 #2 或 #3 之前停止,哪个先出现。
regex - RegEx - 排除匹配的模式
我要排除以下模式。
我创建了一个正则表达式来匹配其中的任何一个。但是,我想得到除这些之外的所有东西。我不确定如何反转我创建的这个正则表达式。
上面的模式匹配所有列出的字符串。现在我希望它与其他一切相匹配。我该怎么做?
从搜索结果来看,我似乎需要负前瞻/回顾之类的东西。但是,我真的不明白。有人能指出我正确的方向吗?
javascript - Javascript 检查周围的文本
我正在编写一个 BBCode 风格的编辑器——我有充分的理由这样做,而不是使用现成的工作。我已经让它大部分工作正常,但我需要测试一种情况。考虑以下标记
上面的管道字符不是您稍后会看到的错字 - 我将其用作占位符。
现在想象下一个用户操作是插入 - 我的版本 - 粗体降价标签 [bold][/bold]。无论用户是否已经选择了一些现有文本(例如 abc),我的代码都可以处理此操作。
但是,请看以下情况
- abc selected - 转换产生 [bold]abc[/bold]
- abc 的 c 之后的插入符号 - 转换产生 abc[bold][/bold]
- 管道上的插入符号,|,最后一个字符 [/para]
目前,我的代码很乐意执行并返回 [pa|[bold][/bold]ra]。
显然,我需要做的是确定用户的选择或当前插入符号位置不完全位于我的降价标签之一内(我已经有代码检查选择不与降价标签重叠。
我需要按照“环顾四周”选择开始和结束位置的方式做一些事情,以检测该位置是否在降价标签内。
也许解决方案——正如“环视”这个词所暗示的——是在正则表达式中。但是,我的正则表达式技能非常基础,所以我非常感谢任何帮助。
regex - 看看背后:正则表达式风靡一时?
最近,许多正则表达式问题在查询中都有某种环视元素,在我看来,这对于匹配的成功并不是必需的。是否有一些教学资源正在推广它们?我试图弄清楚使用正面/后面的积极展望会更好地解决哪种情况。我可以看到的主要应用是尝试不匹配元素时。但是,例如,最近一个问题中的这个查询有一个简单的解决方案来捕获.*
,但是为什么要使用后面的查找呢?
而这个来自另一个问题:
什么时候使用积极的环视真的更好?你能举一些例子吗?
我意识到这接近于基于意见的问题,但我认为答案将非常有启发性。正则表达式在没有让事情变得更复杂的情况下足够令人困惑......我已经阅读了这个页面,并且对何时使用它们而不是它们如何工作的一些简单指南更感兴趣。
感谢所有的答复。除了以下内容,我建议您在此处查看m.buettner 的出色答案。
regex - 环顾正则表达式之间有文本
我有日志条目,我想找到包含[ERR]
但不包含IsLocked
.
示例行:
我只想用我的正则表达式找到第三行。我试过
但这不起作用,因为 和 之间有[ERR]
文本IsLocked
。