本章目录:
一、JS的正则表达式
JS正则提供了两个方法:
test():用于判断字符串是否符合规定;
exec():获取匹配的数据;
1.test()
定义一个正则表达式:
reg = /\d+/; // 用于判断多个数字 reg.test("akshdjkf78snjdkf"); // 返回true,因为中间含有数字
上述的字符串能够满足正则表达式,所以返回true,但这种匹配无法用于验证手机号。
reg = /^\d+$/; // 匹配从开头到结尾都是数字 reg.test("13928787837"); // 返回true reg.test("1237h39284"); //返回false
这样就可以检验是否全是数字。
2.exec()
同样定义一个正则表达式:
reg = /\d+/; reg.exec("sdufh_67_nsjkd_89_djkjs"); // 返回["67"]
我们得到的结果是["67"],也就是说只匹配到第一个数字。
全局匹配:
如果我们要想拿到所有符合规则的内容,则需要使用全局匹配:
reg = /\d+/g; reg.exec("sdufh_67_nsjkd_89_djkjs"); // 返回["67"] reg.exec("sdufh_67_nsjkd_89_djkjs"); // 返回["89"] reg.exec("sdufh_67_nsjkd_89_djkjs"); // 返回null reg.exec("sdufh_67_nsjkd_89_djkjs"); // 再次执行返回["67"]
当匹配到最后一个符合规则的内容后,下一次再次执行会返回null,我们可以用此来判断是否查找完毕。如果在返回null后再次执行,又会从头开始。
分组:
text = "JavaScript is more fun than Java or JavaBeans!"; reg = /\bJava(\w*)\b/g; reg.exec(text); //返回["JavaScript","Script"] reg.exec(text); //返回["Java",""] reg.exec(text); //返回["JavaBeans","Beans"] reg.exec(text); //返回null reg.exec(text); //返回["JavaScript","Script"]
使用"()"将需要提取的部分括起来就可以获取内容。
匹配模式:
前面我们使用了全局匹配"g",其他还有"i"和"m"模式。
"i"模式:不区分大小写。这个很好理解。
"m"模式:多行模式。这里的多行,不是指可以匹配多行文本("g"默认就可以匹配带换行的文本)。这里的多行是说当在正则表达式中要匹配开头和结尾("^"和"$")的时候,对每一行都生效。例如:
text = "JavaScript is more fun than \nJava or JavaBeans!" reg = /^Java(\w*)/g; //匹配以Java开头的单词 reg.exec(text); //返回["JavaScript","Script"] reg.exec(text); //返回null
我们可以看到,如果只是全局模式,只能匹配到JavaScript,因为只有这个单词是位于开头。
我们加上"m"模式:
text = "JavaScript is more fun than \nJava or JavaBeans!" reg = /^Java(\w*)/gm; //匹配以Java开头的单词 reg.exec(text); //返回["JavaScript","Script"] reg.exec(text); //返回["Java",""] reg.exec(text); //返回null
加上"m"后,位于换行符后面的Java也被当做位于开头的单词。