问题标签 [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.

0 投票
3 回答
1482 浏览

.net - 正则表达式:否定字符类中的否定后视?(.NET 风格)

我正在尝试做的事情:删除围绕特定未转义字符的最里面的未转义方括号(\是转义)

输入:[\[x\]]\]\[[\[y\]]
在 y 周围查找括号[\[x\]]\]\[\[y\]
时输出:在 x 周围查找括号时输出:\[x\]\]\[[\[y\]]

简而言之,只删除特定字符周围未转义的括号集。

我试过这个 (for y): Regex.Replace(input, @"(?<!\\)\[(.*?(?<!\\)y.*?)(?<!\\)\]",@"$1",但这似乎与第一个未转义[的(在 x 之前)与最后一个匹配]。我想我可以用.否定字符类替换通配符来排除[and ],但是我真正需要否定的是这些的未转义版本,当我尝试(?<!\\)在否定字符类中加入否定的lookbehind 时,我似乎什么都不匹配一点也不。

提前感谢您的时间和精力。

编辑:

澄清一下,未转义方括号的内容可以是任何内容(另一个未转义方括号除外),只要它们包含感兴趣的未转义字符 ( y)。括号中的所有内容应保留。

0 投票
1 回答
662 浏览

regex - 遇到一系列字符时停止匹配:修复后视

我有以下正则表达式:

它旨在匹配hello world!字符串hello world! [[A string typically used in programming examples]]

然而我只是匹配整个字符串,我不知道为什么。我已经尝试了各种环顾四周,但它就是行不通...

任何人都知道如何解决这个问题?

谢谢,
CFP。

0 投票
3 回答
305079 浏览

regex - 正则表达式前瞻、后瞻和原子组

我在我的正则表达式正文中发现了这些东西,但我不知道我可以用它们做什么。有人有例子,所以我可以尝试了解它们是如何工作的吗?

0 投票
4 回答
4334 浏览

regex - 环视是否会影响正则表达式可以匹配哪些语言?

现代正则表达式引擎中有一些功能允许您匹配没有该功能无法匹配的语言。例如,以下使用反向引用的正则表达式匹配由重复自身的单词组成的所有字符串的语言:(.+)\1. 这种语言不是正则的,不能被不使用反向引用的正则表达式匹配。

环视是否也会影响正则表达式可以匹配哪些语言?即是否有任何语言可以使用环视来匹配,否则无法匹配?如果是这样,这是否适用于所有类型的环视(消极或积极的前瞻或后视)或仅适用于其中一些?

0 投票
2 回答
11728 浏览

java - 需要在java中将字符串分成两部分

我有一个字符串,其中包含一个连续的数字块,然后是一个连续的字符块。我需要将它们分成两部分(一个整数部分和一个字符串)。

我尝试使用String.split("\\D", 1),但它正在吃掉第一个字符。我检查了所有 String API 并没有找到合适的方法。

有什么方法可以做这件事吗?

0 投票
3 回答
4461 浏览

regex - 正则表达式 '(?<=#)[^#]+(?=#)' 是如何工作的?

我在 C# 程序中有以下正则表达式,并且难以理解它:

我将其分解为我认为我理解的内容:

所以我遇到的问题是?<=?<部分。从阅读 MSDN,?<name>用于命名组,但在这种情况下,尖括号永远不会关闭。

我在文档中找不到?=,搜索它真的很困难,因为搜索引擎大多会忽略那些特殊字符。

0 投票
4 回答
4162 浏览

c# - 从c#中的字符串中提取最后一个匹配项

我有表格中的字符串[abc].[some other string].[can.also.contain.periods].[our match]

我现在想匹配字符串“我们的匹配”(即不带括号),所以我玩了环顾四周之类的东西。我现在得到了正确的匹配,但我认为这不是一个干净的解决方案。

语言是 .net/c#。如果有一个不涉及正则表达式的更简单的解决方案,我也很高兴知道

真正让我恼火的是,我不能用(.*?)它来捕获字符串,因为看起来非贪婪不适用于lookbehinds。

我也试过:Regex.Split(str, @"\]\.\[").Last().TrimEnd(']');,但我也不是很喜欢这个解决方案

0 投票
3 回答
219 浏览

java - 正则表达式优化问题

作为个人学习练习,我编写了这个正则表达式来将一元字符串拆分为长度增加 2 次方的部分(另见 ideone.com):

这结合了环视期间的捕获、嵌套环视、反向引用匹配和无限长的后视(Java 中不正式支持但无论如何都可以使用)。也利用了 2 的幂和的属性以及字符串具有一元字母表的事实。

这个解决方案既不可读,性能也很糟糕。

我的问题是,你将如何“优化”这个正则表达式?

  • 你能让正则表达式更具可读性吗(如果性能更差也没关系)
  • 你能让正则表达式表现得更好吗(如果它不那么可读也没关系)
0 投票
3 回答
3369 浏览

javascript - 正则表达式:在字母后查找单词,但结果中不包含该字母

这是我可能有的字符串:

如果括号后的文本以My.

问题在于它在结果中包含第一个括号,因为它是找到它的字母/字符。

我将如何摆脱结果中的括号?


编辑

有关更多信息,我正在编辑C LanguageSHJS 语法荧光笔的 javascript 文件。

这是此问题的所有相关代码:

0 投票
1 回答
6365 浏览

java - 这个 Java 正则表达式如何检测回文?

这是一系列教育正则表达式文章的第三部分。它遵循这个正则表达式如何找到三角数?(首先介绍了嵌套引用)以及我们如何将 a^nb^n 与 Java 正则表达式匹配? (其中进一步阐述了前瞻“计数”机制)。这部分介绍了一种特定形式的嵌套断言,当它与嵌套引用结合使用时,Java 正则表达式可以匹配大多数人认为“不可能”的东西:回文!

回文的语言是非常规的;它实际上是无上下文的(对于给定的字母表)。也就是说,现代正则表达式实现不仅仅识别常规语言,Perl/PCRE 的递归模式和 .NET 的平衡组可以轻松识别回文(请参阅:相关问题)。

但是,Java 的正则表达式引擎不支持这些“高级”功能。然而,“某人” *wink*设法编写了以下正则表达式,似乎可以很好地完成这项工作(另见 ideone.com):

所以这似乎有效,但如何?

参考


常识警报!!!

这不是检测回文的最佳方法;O(N^3)充其量是。用更通用的编程语言执行这种检测既更有效也更直接。

您不想使用正则表达式来检测回文,原因与您不想使用正则表达式查找素数的原因相同。也就是说,您将研究非递归非平衡组正则表达式如何检测回文,原因与您研究正则表达式如何用于素数测试的原因相同:这很有趣,很有挑战性,很有教育意义。

相关问题