是的!
感谢“期待”运算符,它是在Perl语言的正则表达式语法中引入的。Perl RegEx 框架被许多语言使用,包括PHP和Javascript。
Perl 中也存在“look behind”运算符,但Javascript不支持它。
下面,我展示了用于搜索的带有JavaScript语法的正则表达式:
1-搜索(“Javascript”和“PHP”)
S = "Javascript is a client language and PHP is a server language";
patt = /^(?=.*Javascript).*PHP/;
if ( S.match(patt) )
document.write("Found it!");
else
document.write("Not Found");
它打印“找到它”。
2-现在搜索(“Javascript”而不是“PHP”)
S = "Javascript is a client language and PHP is a server language";
patt = patt = /^(?!.*PHP).*Javascript/;
if ( S.match(patt) )
document.write("Found it!");
else
document.write("Not Found");
它打印“未找到”,因为 PHP 包含在字符串中。
3-第三次搜索是(“Javascript”和“PHP”和“Perl”)
S = "Javascript rules, PHP are in most server, however Perl is inspiring";
patt = /^(?=.*Javascript)^(?=.*PHP).*Perl/;
if ( S.match(patt) )
document.write("Found it!");
else
document.write("Not Found");
它打印“找到它!” .
4-最后,最后一种情况是(“Javascript”和(“PHP”或“Perl”))。没有什么不同,我只是使用带括号的传统分组(圆括号):
S = "Javascript rules, however Perl is inspiring";
patt = /^(?=.*Javascript)(.*PHP|.*Perl)/;
if ( S.match(patt) )
document.write("Found it!");
else
document.write("Not Found");
它打印“找到它!” 因为缺少 PHP,但 Perl 在字符串中。
评论后编辑:
我已经承认了。“向前看”的语法很糟糕。但是,这很容易理解。扫描仪看着但不要走路!
patt = /Bee (?=Gees)/; // patt = patt1(?=patt2) => patt1 + patt2
S = "Bee Gees";
if (S.match(patt))
document.write('ok'); // print OK and cursor stops at "G"
那是积极的展望
patt = /Bee (?!Gees)/; // patt = patt1(?!patt2) => patt1 + Not (patt2)
S = "Bee Gees";
if (S.match(patt))
document.write('ok'); // it does not match
S = "Bee Goes";
if (S.match(patt))
document.write('ok'); // print OK and cursor stops at "G"
那是消极的期待
好消息是Patt2可以是一个复杂的模式,具有分组、子分组等。
最后解释:
- .* : 0 个或多个字符
- ^ : 如果是字符串的开头,则匹配。它不移动光标。
- $ : 匹配如果是字符串的结尾。它不移动光标。
- (p1|p2|...) :如果p1或p2或 ... 匹配,则匹配。
所以
patt = /^(?=.*Javascript).*PHP/;
是一个正则表达式(/是一个正则表达式分隔符,作为字符串的引号),表示期待(跳转字符直到找到“Javascript”),如果成功,跳转字符直到找到“PHP”
(请记住,期待不会'不要移动光标!)
即,如果扫描仪找到“Javascript”,“PHP”就匹配。