问题标签 [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.
regex - 如何使用正则表达式前瞻来限制输入字符串的总长度
我有这个正则表达式,想添加限制总长度不超过 15 个字符的规则。我看到了一些前瞻的例子,但它们不是很清楚。你能帮我修改这个表达式以支持新规则吗?
javascript - 没有中间表达式重复的正则表达式 (axb|cxd)
我只是不断地用这个撞墙,我无法解决它。我正在尝试获得一个执行如下的正则表达式:
除非在表达式中不重复 x(因为它确实是长编码匹配表达式)。这是针对一个大字符串进行测试的,在该字符串中我只需要匹配 x 即可进行字符串替换,因此可以选择零宽度向前/向后。有任何想法吗?
a、b、c 和 d 相当小,因此如果它使表达式更易于形成,它们可以重复。
提前致谢。
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".
- The lookaround, (?=(\d+)), captures 456 and put into \1, for (\d+)
- The wordcharacter, \w+, matches the whole string("456x56")
- \1, which is 456, should be followed by \w+
- 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.
regex - 将固定长度块与可变长度元素匹配的正则表达式
我正在编写一些正则表达式来匹配包含用空格填充的数字元素的行,例如-2.45
. 正则表达式很简单:
但是,我有一个额外的限制,即整个块仅限于七个字符。我可以修改表达式以将前导空格和数字限制在其理论最大值内:
但这不是解决方案,因为\s{0,3}
匹配独立于\d{1,4}
,所以整个事情可以匹配一个从四到十一个字符的块。
有什么办法可以将这样的整个组限制为固定长度?
编辑:
为了澄清,我正在处理这七个字符组中的三个用三个空格分隔的行,因此较大的正则表达式遵循以下行:
混合了其他行,其中只有一个或两个这些数字组,带有演示性垃圾的行,以及带有其他(可能不可知的)内容的行,所以我希望我匹配的内容非常精确。
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* 上显示警告消息。设计更好的前瞻机制。
有谁知道他所描述的解决方案?
php - 正则表达式如何向前看,看看是否还有另一个匹配的结束部分?
我正在使用正则表达式模式来查找 [code][/code] BB 标签的实例。(这是在 PHP 中使用 preg_match / preg_relace / 等的珍珠型正则表达式)
好吧,我的问题是我怎样才能做到这样有人可以输入类似的内容:
键入此内容的目的是向新手演示如何将他们的代码放入 [code][/code] 标签中。
目前,如果我输入,正则表达式将在“[/code]”的第一个实例处停止,而不是继续向前看“[code]”的第二个实例
由于我是新用户,我无法发布图片,但这里是输出的屏幕截图:http: //i.imgur.com/t8zNh.png
我知道正则表达式中有一个术语叫做“积极展望”和“消极展望”,但我不太确定它们的含义,或者它们是否与我的情况相关。有人可以帮帮我吗?谢谢你。
编辑:我很抱歉,但我似乎没有足够的代表 +1 任何东西。我非常感谢您的帮助,而且速度非常快。
regex - 正则表达式如果后跟特定单词如何防止匹配。像第一个字符包括前瞻?
我正在使用正则表达式来匹配 SQL 查询中的 where 条件。
我想要WHERE <ANY CONDITION>
,但除了WHERE ROWNUM <WHATEVER>
.
所以我不想ROWNUM
出现在WHERE
关键字之后。
我确实使用Lookaheads来实现这一点。我的正则表达式是WHERE (.*(?! ROWNUM )+)
. 问题是,它仍然匹配WHERE ROWNUM < 1000
。如果我在正则表达式中删除了之前的空格ROWNUM
,那么名称以结尾的任何列ROWNUM
都将不匹配。如果我删除之后的空格,WHERE
即使WHERE
关键字后面没有空格,它也会匹配。ROWNUM
但是,如果和关键字之间有两个空格或任何其他字符WHERE
(可能是条件),则可以。所以如果ROWNUM
是第一个条件,我的正则表达式不起作用。
我怎样才能解决这个问题 ?
java - 带有前瞻的正则表达式性能/速度差
我一直在观察带有几个前瞻的表达式的执行时间非常慢。
我想这是由于底层数据结构造成的,但这似乎非常极端,我想知道我是否做错了什么,或者是否有已知的解决方法。
问题是确定一组单词是否以任何顺序出现在字符串中。例如,我们想找出两个术语“term1”和“term2”是否在字符串中的某个位置。我用表达式做到这一点:
但我观察到的是,这比首先检查要慢一个数量级
就在那时
这似乎表明我应该使用模式数组而不是带有前瞻的单个模式......这是对的吗?好像不对……
这是一个示例测试代码和结果时间:
这在我的电脑中输出:
regex - 正则表达式:两个匹配项之间的负前瞻
我正在尝试构建一个有点像这样的正则表达式:
这似乎适用于消极的前瞻性,但是当我遇到这样的情况时遇到了问题:
我希望上面的句子匹配,但是第一个和第二个匹配的单词之间的否定前瞻“溢出”,所以第二个单词永远不会匹配。
让我们看一个实际的例子。
我不想匹配每个包含单词“i”和单词“pie”的句子,但不匹配这两个单词之间的单词“hate”。我有这三句话:
我有这个正则表达式:
匹配第一句,但不匹配第二句,因为否定前瞻扫描整个字符串。
有没有办法限制负前瞻,让它在遇到“仇恨”之前遇到“馅饼”就满足了?
注意:在我的实现中,这个正则表达式后面可能还有其他术语(它是从语法搜索引擎动态构建的),例如:
我目前正在使用 JRegex,但如有必要可能会切换到 JDK Regex
更新:我忘了在我最初的问题中提到一些东西:
句子中可能存在“否定结构”,如果可能的话,即使“否定”结构存在更远的位置,我也确实希望匹配该句子。
为了澄清,看看这些句子:
rob 的答案非常适合这个额外的约束,所以我接受了那个。
parsing - Bison 解析器不会提前获取令牌
我有以下解析器语法(这是一个小示例):
现在我正在尝试解析以下任何一行:
但是,Bison 一直看到“*mem”并减少了“STAR expr”规则,并且没有执行前瞻来查看“STAR expr assignop...”是否匹配。据我了解野牛,它应该做这个前瞻性。我最接近的猜测是 %prec 正在关闭前瞻或类似的奇怪东西,但我不明白为什么会这样做(因为 prec 值是相等的)。
在这种情况下,如何让它执行前瞻?
编辑:
遇到'STAR expr'时进入的状态是:
所以我不明白为什么它可以选择 assignop 时选择 $default (请注意,在这种情况下,parser.y 文件中规则的顺序不会影响它选择哪一个;我已经尝试重新排序 assignop 一个高于标准的'STAR expr')。