问题标签 [regex-lookarounds]

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 投票
5 回答
5054 浏览

regex - 嵌套的正则表达式前瞻和后视

我在正则表达式中的嵌套“+”/“-”前瞻/后视时遇到问题。

假设我想更改'*'字符串中的'%'并且假设'\'转义下一个字符。(将正则表达式转换为 sql 之类的命令 ^^)。

所以字符串

  • '*test*'应改为'%test%',
  • '\\*test\\*'-> '\\%test\\%',但是
  • '\*test\*'并且'\\\*test\\\*'应该保持不变。

我试过:

与上面给出的示例中的“*”匹配的正确正则表达式是什么?

有什么区别(?<!\\(?=\\\\)*)\*(?=(?<!\\)(?=\\\\)*)\*或者如果这些本质上是错误的,那么具有这种视觉结构的正则表达式之间的区别是什么?

0 投票
5 回答
43919 浏览

javascript - Javascript正则表达式:匹配任何东西直到某物(如果存在)

我是正则表达式的新手,这可能是一个非常简单的问题(希望如此)。

我正在尝试对 3 种字符串使用一种解决方案

  • “45%”,预期结果:“45”
  • “45”,预期结果:“45”
  • ““, 预期结果: ””

我正在尝试什么(让字符串为str):

这在我的脑海中听起来就像“匹配任何实例直到 '%' 如果找到它,或者只是匹配任何东西”

在萤火虫的脑海中,这听起来更像是“只匹配任何东西,完全忽略负前瞻”。也让它变得懒惰 - (.*)?- 似乎没有帮助。

让我们暂时忘记,在这种特定情况下,我只匹配数字,所以 a/\d*/会这样做。我试图理解一个一般规则,以便我可以随时应用它。

有人会这么好心来帮助我吗?

0 投票
5 回答
3877 浏览

regex - Regexp matching a string - positive lookahead

Regexp: (?=(\d+))\w+\1 String: 456x56

Hi,

I am not getting the concept, how this regex matches "56x56" in the string "456x56".

  1. The lookaround, (?=(\d+)), captures 456 and put into \1, for (\d+)
  2. The wordcharacter, \w+, matches the whole string("456x56")
  3. \1, which is 456, should be followed by \w+
  4. After backtracking the string, it should not find a match, as there is no "456" preceded by a word character

However the regexp matches 56x56.

0 投票
4 回答
5782 浏览

java - Java 对条件前瞻的支持

在下面,假设我试图33333-从结果中排除邮政编码。
我愿意:

期望获得:

我正在尝试强制执行以下格式:
5 位数字可选地后跟 - 和 4 位数字。不需要只有 - (连字符)的 5 位数字

我得到例外:

我没有正确使用条件前瞻吗?

0 投票
3 回答
1013 浏览

c# - 结合积极的前瞻和消极的前瞻?

我不擅长正则表达式,但我有以下内容,但我假设以下部分意味着查找 13 - 16 位数字,然后如果找到 3 - 4 位数字则返回成功。问题是 3 - 4 位数字是可选的,它们也可以在 13 - 16 位数字之前,所以我想我想结合一个积极的前瞻/后视,消极的前瞻/后视。这听起来很复杂,有没有更简单的方法?

这将匹配以下代码段中的 ccnum 和系列:

但是,如果我删除 ccnum 或系列,它不会匹配任何内容,并且系列可以是可选的。该系列也可以出现在 ccnum 之前或之后,所以如果我将系列属性放在 ccnum 属性之前,它也不匹配任何东西。如果我在 ccnum 之前有一个系列作为单独的元素,它也不匹配,例如或者如果我忽略一个系列元素:

我需要正则表达式匹配以下场景,但我不知道元素的确切名称,在这种情况下,我只是将它们称为 ccnum 和 series。

以下是有效的:

它还应该匹配以下内容,但不匹配:

现在,为了让它工作,我使用了 3 个单独的正则表达式:

1 以匹配安全码之前的信用卡号。

1 以匹配信用卡号之前的安全代码。

1 仅匹配信用卡号。

我尝试将表达式组合成一个或,但我最终得到了 5 个组(前 2 个表达式中的 2 个和最后一个中的 1 个)

0 投票
6 回答
71098 浏览

regex - 正则表达式前瞻 grep 中的“不跟随”

我正在尝试查找所有Ui\.未跟随Line甚至只是字母的实例L

编写正则表达式以查找特定字符串的所有实例而不是另一个字符串的正确方法是什么?

使用前瞻

0 投票
4 回答
2379 浏览

regex - 正则表达式前瞻

我正在使用正则表达式来查找:

紧随其后的任何字符,直到它击中下一个:

现在,当我运行这个正则表达式时,我做了:

在此文本上:

我希望得到:

但相反,它匹配一切。有更多正则表达式经验的人知道我哪里出错了吗?我以前使用过正则表达式进行模式匹配,但这是我第一次环顾四周/提前体验。

提前感谢任何帮助/提示/指针:-)

0 投票
1 回答
587 浏览

regex - 正则表达式积极前瞻

为什么这种积极的前瞻与粗体文本不匹配?(不是 . 也不是 ->)

提示6ai_flags = 0; // 注释hints.ai_flags
hints6 . ai_family = AF_UNSPEC;
int newsocket = socket(结果-> ai_family结果-> ai_socktype结果-> ai_protocol);
0 投票
3 回答
3088 浏览

java - 带有前瞻的正则表达式性能/速度差

我一直在观察带有几个前瞻的表达式的执行时间非常慢。

我想这是由于底层数据结构造成的,但这似乎非常极端,我想知道我是否做错了什么,或者是否有已知的解决方法。

问题是确定一组单词是否以任何顺序出现在字符串中。例如,我们想找出两个术语“term1”和“term2”是否在字符串中的某个位置。我用表达式做到这一点:

但我观察到的是,这比首先检查要慢一个数量级

就在那时

这似乎表明我应该使用模式数组而不是带有前瞻的单个模式......这是对的吗?好像不对……

这是一个示例测试代码和结果时间:

这在我的电脑中输出:

0 投票
2 回答
3195 浏览

python - 正则表达式匹配后跟另一个字符串而不捕获后者的字符串

是否有能力使前瞻断言不被捕获?喜欢bar(?:!foo)bar(?!:foo)不工作的事情(Python)。