15.16.如何使用向前查找组或向后查找组语法?

15.16.1 问题
如果一个模式中规定, 在它的之前或之后不能存在某些字符, 应怎样匹配呢?
15.16.2 解决办法
可以使用负向前查找组”?!”或负向后查找组”?<!”来表示那些字符是不应该存在于某个模式之前或之后。而使用正向前查找组”?=”或正向后查找组”?<=”则表示这些字符是应该存在于某个模式之前或之后。
15.16.3 讨论
有些时候, 你想某个模式以后的表达式进行匹配, 但又不想把这个模式包括在你的结果里面。
例如: 你想把所有”$”号之后的数目字找出, 但又不想包括”$”号本身。
400 boxes at $100 per unit and 300 boxes at $50 per unit.
可以在正则表达式加入以下的正向后查找组语法:
/(?<=\$)\d+/
除此之外, 你也可以使用负向后查找组语法找出所有不包括”$”号在其跟前的字符:
/\b(?<!\$)\d+\b/
值得注意的是, 负向后查找组语法其实就是把正向后查找组语法里的”=”号取代为”!”, 以表示”$”号不能存在于匹配的对象中。如果只是想把价钱里的数字抽出, 可以使用正向前查找组语法:
代码如下:
+展开
-ActionScript
private var lookBehindPrice:RegExp = /(?<=[\$|€])[0-9.]+/g;
private function matchPrice():void {
var s:String = "dfsf24ds: €23.45 ds2e4d: $5.31 CFMX1: $899.00 d3923: €69";
trace(s.match(this.lookBehindPrice));
}

如果要为一个字符串中的变量宣告进行匹配的话, 可以使用正向前查找组语法:
代码如下:
+展开
-ActionScript
private var lookBehindVariables:RegExp = /(?<=var )[0-9_a-zA-Z]+/g;
private function matchVars():void {
var s:String = " private var lookAheadVariables:RegExp = /blah/
private var str:String = 'foo'";
trace(s.match(lookBehindVariables));
}

如果你想对所有非”.jpg”的图片进行匹配的话, 你可以使用负向前查找组语法:
+展开
-ActionScript
var reg:RegExp = /pic(?!\.jpg)/;

加支付宝好友偷能量挖...


评论(0)网络
阅读(148)喜欢(0)flash/flex/fcs/AIR