您的位置:首页 > Web前端 > JavaScript

javascript 的perl类型的正则表达式

2010-04-16 09:06 295 查看
(1)var recat = new RegExp("cat"); //简单定义。

var recat = new RegExp("cat","gi");//g->global,i->case insensitive.

var recat = /cat/gi; //perl模式

(2)var sToMatch = "cat";

var reCat = /cat/;

alert(reCat.test(sToMatch)); //true

var sToMatch = "a bat, a cat, a Fat Cat, a faT caT";

var reAt = /at/;

var arrMatches = reAt.exec(sToMatch); //只返回第一个at出现的实例,bat. 注意这里使用exec时,参数是原字符串

var sToMatch = "a bat, a cat, a Fat Cat, a faT caT";

var reAt = /at/gi;

var arrMatches = sToMatch.match(reAt); //这里使用match时候,参数是正则表达式

var sToMatch = "a bat, a cat, a Fat Cat, a faT caT";

var reAt = /at/gi;

alert(sToMatch.search(reAt)); //这里和indexOf()有些相似 ,输出3

(3)var sToChange = "The sky is blue. ";

alert(sToChange.replace("blue","gray")); //output "The sky is gray. "

var sToChange = "The sky is blue. ";

var reRed = /red/;

var sResultText = sToChange.replace(reRed,function(sMatch){ //这里replace()的第二个参数是一个匿名函数,该

return "blue"; //匿名函数接受的参数sMatch表示匹配上的字符串。

});

alert(sResultText);

(4)var sColor = "red,blue,green,black";

var arrColors = sColor.split(",");

var reComma = //,/;

var arrColors = sColor.split(reComma);

(5)元字符:

( { [ / ^ $ | ) ? * + . ,

var reQMark = //?/;

var reQMark = new RegExp("//?");

特殊字符:

var sColor = "blue";

var reB = //x62/; //ASCII码

alert(reB.test(sColor));

var sColor = "blue";

var reB = //u0062/; // unicode 的4位十六进制

alert(reB.test(sColor)); //true,

其他的很多特性与perl的非常相似。

比如:量词 ? * + {n} {n,m} {n,}

贪婪 * + ? .*?与perl相同

分组

String.prototype.trim = function(){
var reExtraSpace = /^/s(.*?)/s+$/;
return this.replace(reExtraSpace,$1);
};


反向引用

(1) (A?(B?(C?)))

(2) (B?(C?))

(3) (C?)

候选

var color = "red";

var reRed = /(red|black)/;

alert(reRed.test(color));

var replaceBadWords = /badword|anotherbadword/gi;

var userInput = "This is a string using badword1 and badword2";

var finalText = userInput.replace(replaceBadWords,"****");

非捕获性分组

?:

无法使用$1来进行捕获

var reg = /(?:/d+)/; //这里的$1为空

前瞻(lookahead)

var sToMatch1 = "bedroom";

var sToMatch2 = "bedding";

var reBed = /(bed(?=room))/;

alert(reBed.test(sToMatch1)); //true

alert(RegExp.$1); //bed

alert(reBed.test(sToMatch2)); //false

边界(^ $ /b /B),多行(m)

实例属性(RegExp)

global,ignoreCase,lastIndex,multiline,source(正则表达式的源字符串形式)

静态属性

$_(最后用于匹配的字符串,传递给exec(),test()的字符串), (input)

$&(最后匹配的字符) (lastMatch)

$+(最后匹配的分组) (lastParen)

$`(上次匹配的前面的子串) (leftContext)

$*(指定所有的表达式使用多行模式的布尔值) (multiline)

$' (上次匹配之后的子串) [b](rightContext)[/b]

var sToMatch = "this has been a short, short summer";

var reShort = /(s)hort/g;

reShort.test(sToMatch);

alert(RegExp.input); //"this has been a short, short summer"

alert(RegExp.leftContext); //"this has been a "

alert(RegExp.rightContext); //", short summer"

alert(RegExp.lastMatch); //"short"

alert(RegExp.lastParen); //"s"

alert(RegExp.$_);

alert(RegExp.["$`"]);

alert(RegExp.["$&"]);...

电子邮件的验证:

/^(?:/w+/.?)*/w+@(?:/w+/.?)*/w+$/;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: