1、创建
// 字面量var partten = /^[0-9]$/// 构造函数创建var partten = new RegExp('^[0-9]$')
2、字符
[...] // 匹配符合中括号内的任意字符[^...] // 匹配任意非中括号内的字符[\w] // 等价于 [a-zA-Z0-9_][\W] // 等价于 [^a-zA-Z0-9_][\d] // 等价于 [0-9][\D] // 等价于 [^0-9][\s] // 任何空白字符[\S] // 任何非空白字符
3、重复匹配次数
{n,m} // 匹配n-m次{n,} // 匹配至少n次{n} // 匹配 n 次? // 匹配0或1次 相当于 {0,1}+ // 匹配 1 及以上次数 相当于{1,}* // 匹配 0 及以上次数 相当于{0,}
4、或 |
[a|b] // 匹配 a 或 b
5、锚
^ // 匹配字符串开始 和行的开头$ // 匹配字符串结束 和行的结束
6、修饰符
i // 不区分大小写g // 全局匹配 即找到所有匹配项,而不是遇见匹配值就停止m // 多行模式 即在到达一行文本末尾时还会继续查找下一行中是否存在与模式匹配的项。
7、字符串的4种正则方法
search(regexp)
/* * 接收参数为正则表达式,不支持全局g * 若传入参数不是正则表达式 则首先会通过RegExp构造函数转换为正则 * 返回首次匹配处的索引值 若不存在返回-1 */-------------------------------------------------------------------string.search(/^\d$/i); // ===>search() 'thIs is a string'.search(/is/g); // ===>5'thIs is a string'.search(/is/i); // ===>2
replace(regexp, 要替换成的string)
/* * 接收参数 第一个为正则表达式,第二个为要替换成的字符串 也可以是函数,计算返回动态的字符串 支持全局g * 若第一个参数不是正则表达式 是字符串,与search不同,而是直接匹配这个字符串 * 返回首次匹配处的索引值 若不存在返回-1 */string.replace(/javascript/gi,'javaScript') //===> 将全局不区分大小写的JavaScript字符串替换成 javaScript
match(regexp)非全局匹配时与正则对象方法的exec返回结果很像
/* * 最常用的string正则方法 * 接收参数 为正则表达式 * 返回匹配结果组成的数组 * 如果正则没有g匹配符,则返回数组第一个为完整匹配元素,其他存放用圆括号括起来的与字符串相匹配的子串 */'this is a number 1 or 123 or 98 0 9 is 67'.match(/\d+/g)// ====> ["1", "123", "98", "0", "9", "67"]'this is a number 1 or 123 or 98 0 9 is 67'.match(/\d+/)// ====> ["1", index: 17, input: "this is a number 1 or 123 or 98 0 9 is 67"]'this is a number 1 or 123 or 98 0 9 is 67'.match(/(\ )\d+/)// ====> [" 1", " ", index: 16, input: "this is a number 1 or 123 or 98 0 9 is 67"]'this is a number 1 or 123 or 98 0 9 is 67'.match(/(\ )\d+/g)// ====> [" 1", " 123", " 98", " 0", " 9", " 67"]
split(regexp)
/* * split()可以接受一个正则参数 */'this is a number 1 or 123 or 98 0 9 is 67'.split(/\s|i/)// ===> ["th", "s", "", "s", "a", "number", "1", "or", "123", "or", "98", "0", "9", "", "s", "67"]'this is a number 1 or 123 or 98 0 9 is 67'.split(/\s/)// ====> ["this", "is", "a", "number", "1", "or", "123", "or", "98", "0", "9", "is", "67"]
8、RegExp对象的2个方法
regexp.exec(string)返回结果跟string方法match的非全局匹配很像
/* * exec()接受一个字符串参数 * 不论正则是否有g全局匹配,都返回一样的结果 */var reg = /(is)+/g;reg.exec('this is a number 1 or 123 or 98 0 9 is 67')// ===> ["is", "is", index: 2, input: "this is a number 1 or 123 or 98 0 9 is 67"]var regg = /(is)+/regg.exec('this is a number 1 or 123 or 98 0 9 is 67')// ====> ["is", "is", index: 2, input: "this is a number 1 or 123 or 98 0 9 is 67"]
regexp.test(string) 与exec相同,但是返回布尔值
var reg = /(is)/;reg.test('this is a number 1 or 123 or 98 0 9 is 67')// ====>truevar reg = /(isddd)/;reg.test('this is a number 1 or 123 or 98 0 9 is 67')// ===>false