js正则表达式基础
- 1、使用构造函数RegExp()方法创建,可以有两个参数,都是字符串形式传入,用test()方法检测是否匹配.
第一个参数:设置正则表达式,
第二个参数:设置匹配模式
“i” 表示忽略大小写
“g” 表示全局匹配,即匹配全部可匹配的结果。如果不带g,匹配成功则不再继续匹配。
var reg = new RegExp("a","i"); /* 字符串中只要有a,就返回true,不区分大小写*/
var str = "Abcd";
var result = reg.test(str);
console.log(result); /* true */
- 2、直接使用字面量创建(简单方便,实际中经常用这种方式创建正则表达式,但是有一种情况必须用第一种方法,即需要向正则表达式中传入变量)
var 变量名 = /正则表达式/匹配模式
var reg = /[a-z]/g; /* 全局匹配所有小写字母,即只要字符串中有小写字母,调用test方法就返回true */
var str = '1234a';
console.log(reg.test(str)); /* true */
常用的表达式
[a-z] 匹配所有小写字母
[A-Z] 匹配所有大写字母
[A-z] 匹配所有字母
[0-9] 匹配所有数字
[^ ] 匹配除了中括号里面的东西
常用的元字符(即拥有特殊含义的字符, \表示转义字符,)
. 表示查找单个字符 (用\.表示'.')
\w 表示查找单词字符,包括数字,字母,下划线(\W意思与之相反,以下同理)
\d 表示查找数字字符
\s 表示查找空白字符,包括空格,换行符,制表符等
\b 表示匹配单词边界 var reg = /\bh/; console.log(reg.test('hello')) /* true */
量词(当n是多个字符时,用()括起来)
在解决问题过程中可能遇到需要向正则表达式中添加变量,使用字面量创建的正则表达式传入变量会被当做正则表达式的一部分去处理,所以只能用构造函数的方法去创建
var str = 'hello';
var reg = /str/; /* str变量会被当做正则的一部分处理 */
var reg = new RegExp(str,'i');
console.log(reg.test('Hello')); /* true */
最后介绍一下RegExp 对象(必须有全局匹配模式)一个重要的属性 :lastIndex
var reg = /[a-z]/g;
console.log(reg.test('a123456')); /* true */
console.log("lastIndex="+reg.lastIndex) /* lastIndex=1 */
console.log(reg.test('a123456')); /* false */
console.log('lastIndex='+reg.lastIndex) /* lastIndex=0 */
正则表达式设置全局匹配模式之后,可能会出现同一个正则表达式判断同一个字符串出现两次不同的结果,原因就是lastIndex,该属性存放一个整数,它声明的是上一次匹配文本之后的第一个字符的位置。
解决办法是去掉全局匹配或者匹配完之后手动设置lastIndex=0;