如何将负向后搜索与未知字符之间进行匹配?

时间:2019-03-27 01:42:02

标签: javascript regex cypress negative-lookbehind

我需要匹配所有.get('asfd'),但前提是.wait(.*)事先不存在。

.wait(500).get('asdf') // shouldn't match
.asdf('asdf').get('asdf') // should match

不幸的是,负向后看不支持量词,因此我不确定如何描述.wait().get('asdf')\d*之间的空白

匹配此不可量化区域的方法是什么?

我认为我需要某种方式来描述最后一组括号后面没有wait,但是有一种简单的方法可以做到这一点吗?

谢谢

2 个答案:

答案 0 :(得分:2)

好吧,花了很多时间进行实验,问这个问题有助于弄清情况。

答案是描述两者之间的区别:与外观无关

(?<!wait)
(?:\([^)]*\))
(\.get\(.*\))

第二部分允许带括号之前的任何字符。有时,第一个括号出现在引号内,应该忽略。不考虑转义的引号,我的整个正则表达式变为:

((?<!wait)\(.*\)\s*)(\.get\((?:"[^"]*"|'[^']*')[^\)]*\))

我用它在匹配组1(.wait()和2(.get())的$1之前/之后插入$2

$1.wait(234)$2.wait(234)

enter image description here

enter image description here

答案 1 :(得分:0)

我不是正则表达式专家,但是呢?

/^(?!\.wait\(\d+\)).*\.get\(.*\)/g

说明:

(?! 负向超前。指定一个组         在主表达式之后不能匹配的值(如果匹配,则结果被丢弃)。

\. 转义字符。匹配“。”。字符(字符代码             46)。

w 字符。匹配“ w”字符(字符代码119)。             区分大小写。

a 字符。匹配一个“ a”字符(字符代码97)。             区分大小写。

i 字符。匹配一个“ i”字符(字符代码105)。             区分大小写。

t 字符。匹配一个“ t”字符(字符代码116)。             区分大小写。

\( 转义字符。匹配“(”字符(字符代码             40)。

\d 数字。匹配任何数字字符(0-9)。

+ 量词。匹配前面的1个或多个             令牌。

\) 转义字符。匹配“)”字符(字符代码)             41)。

. 点。匹配除换行符以外的任何字符。

* 量词。匹配前面的0个或多个         令牌。

\. 转义字符。匹配“。”。字符(字符代码         46)。

g 字符。匹配一个“ g”字符(字符代码103)。案件         敏感。

e 字符。匹配“ e”字符(字符代码101)。案件         敏感。

t 字符。匹配一个“ t”字符(字符代码116)。案件         敏感。

\( 转义字符。匹配“(”字符(字符代码         40)。

. 点。匹配除换行符以外的任何字符。

* 量词。匹配前面的0个或多个         令牌。

\) 转义字符。匹配“)”字符(字符代码)         41)。

相关问题