问题标签 [lookahead]

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

regex - 如何使用正则表达式前瞻来限制输入字符串的总长度

我有这个正则表达式,想添加限制总长度不超过 15 个字符的规则。我看到了一些前瞻的例子,但它们不是很清楚。你能帮我修改这个表达式以支持新规则吗?

0 投票
2 回答
235 浏览

javascript - 没有中间表达式重复的正则表达式 (axb|cxd)

我只是不断地用这个撞墙,我无法解决它。我正在尝试获得一个执行如下的正则表达式:

除非在表达式中不重复 x(因为它确实是长编码匹配表达式)。这是针对一个大字符串进行测试的,在该字符串中我只需要匹配 x 即可进行字符串替换,因此可以选择零宽度向前/向后。有任何想法吗?

a、b、c 和 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 投票
1 回答
1192 浏览

regex - 将固定长度块与可变长度元素匹配的正则表达式

我正在编写一些正则表达式来匹配包含用空格填充的数字元素的行,例如-2.45. 正则表达式很简单:

但是,我有一个额外的限制,即整个块仅限于七个字符。我可以修改表达式以将前导空格和数字限制在其理论最大值内:

但这不是解决方案,因为\s{0,3}匹配独立于\d{1,4},所以整个事情可以匹配一个从四到十一个字符的块。

有什么办法可以将这样的整个组限制为固定长度?

编辑:

为了澄清,我正在处理这七个字符组中的三个用三个空格分隔的行,因此较大的正则表达式遵循以下行:

混合了其他行,其中只有一个或两个这些数字组,带有演示性垃圾的行,以及带有其他(可能不可知的)内容的行,所以我希望我匹配的内容非常精确。

0 投票
1 回答
1941 浏览

regex - Lex 的前瞻运算符算法不正确

在 Andrew Appel 的“Java 中的现代编译器实现”中,他在一个练习中声称:

Lex 有一个前瞻运算符 /,因此正则表达式 abc/def 仅在后跟 def 时才匹配 abc(但 def 不是匹配字符串的一部分,而是下一个标记的一部分)。阿霍等人。[1986] 描述并 Lex [Lesk 1975] 使用了一种不正确的算法来实现前瞻(它在 (a|ab)/ba 上失败,输入 aba,在应该匹配 a 的地方匹配 ab)。Flex [Paxson 1995] 使用了一种更好的机制,该机制对 (a|ab)/ba 正确工作但失败(在 zx*/xy* 上显示警告消息。设计更好的前瞻机制。

有谁知道他所描述的解决方案?

0 投票
3 回答
206 浏览

php - 正则表达式如何向前看,看看是否还有另一个匹配的结束部分?

我正在使用正则表达式模式来查找 [code][/code] BB 标签的实例。(这是在 PHP 中使用 preg_match / preg_relace / 等的珍珠型正则表达式)

好吧,我的问题是我怎样才能做到这样有人可以输入类似的内容:

键入此内容的目的是向新手演示如何将他们的代码放入 [code][/code] 标签中。

目前,如果我输入,正则表达式将在“[/code]”的第一个实例处停止,而不是继续向前看“[code]”的第二个实例

由于我是新用户,我无法发布图片,但这里是输出的屏幕截图:http: //i.imgur.com/t8zNh.png

我知道正则表达式中有一个术语叫做“积极展望”和“消极展望”,但我不太确定它们的含义,或者它们是否与我的情况相关。有人可以帮帮我吗?谢谢你。

编辑:我很抱歉,但我似乎没有足够的代表 +1 任何东西。我非常感谢您的帮助,而且速度非常快。

0 投票
1 回答
1543 浏览

regex - 正则表达式如果后跟特定单词如何防止匹配。像第一个字符包括前瞻?

我正在使用正则表达式来匹配 SQL 查询中的 where 条件。

我想要WHERE <ANY CONDITION>,但除了WHERE ROWNUM <WHATEVER>.
所以我不想ROWNUM出现在WHERE关键字之后。

我确实使用Lookaheads来实现这一点。我的正则表达式是WHERE (.*(?! ROWNUM )+). 问题是,它仍然匹配WHERE ROWNUM < 1000。如果我在正则表达式中删除了之前的空格ROWNUM,那么名称以结尾的任何列ROWNUM都将不匹配。如果我删除之后的空格,WHERE即使WHERE关键字后面没有空格,它也会匹配。ROWNUM但是,如果和关键字之间有两个空格或任何其他字符WHERE(可能是条件),则可以。所以如果ROWNUM是第一个条件,我的正则表达式不起作用。

我怎样才能解决这个问题 ?

0 投票
3 回答
3088 浏览

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

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

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

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

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

就在那时

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

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

这在我的电脑中输出:

0 投票
3 回答
5720 浏览

regex - 正则表达式:两个匹配项之间的负前瞻

我正在尝试构建一个有点像这样的正则表达式:

这似乎适用于消极的前瞻性,但是当我遇到这样的情况时遇到了问题:

我希望上面的句子匹配,但是第一个和第二个匹配的单词之间的否定前瞻“溢出”,所以第二个单词永远不会匹配。

让我们看一个实际的例子。

我不想匹配每个包含单词“i”和单词“pie”的句子,但不匹配这两个单词之间的单词“hate”。我有这三句话:

我有这个正则表达式:

匹配第一句,但不匹配第二句,因为否定前瞻扫描整个字符串。

有没有办法限制负前瞻,让它在遇到“仇恨”之前遇到“馅饼”就满足了?

注意:在我的实现中,这个正则表达式后面可能还有其他术语(它是从语法搜索引擎动态构建的),例如:

我目前正在使用 JRegex,但如有必要可能会切换到 JDK Regex

更新:我忘了在我最初的问题中提到一些东西:

句子中可能存在“否定结构”,如果可能的话,即使“否定”结构存在更远的位置,我也确实希望匹配该句子。

为了澄清,看看这些句子:

rob 的答案非常适合这个额外的约束,所以我接受了那个。

0 投票
2 回答
588 浏览

parsing - Bison 解析器不会提前获取令牌

我有以下解析器语法(这是一个小示例):

现在我正在尝试解析以下任何一行:

但是,Bison 一直看到“*mem”并减少了“STAR expr”规则,并且没有执行前瞻来查看“STAR expr assignop...”是否匹配。据我了解野牛,它应该做这个前瞻性。我最接近的猜测是 %prec 正在关闭前瞻或类似的奇怪东西,但我不明白为什么会这样做(因为 prec 值是相等的)。

在这种情况下,如何让它执行前瞻?

编辑:

遇到'STAR expr'时进入的状态是:

所以我不明白为什么它可以选择 assignop 时选择 $default (请注意,在这种情况下,parser.y 文件中规则的顺序不会影响它选择哪一个;我已经尝试重新排序 assignop 一个高于标准的'STAR expr')。