RegExp
为什么
匹配我们想要的字符串
是什么:
匹配字符串的规则
怎么创建正则表达式
第一种方式是直接通过/正则表达式/写出来,
第二种方式是通过new RegExp('正则表达式')创建一个RegExp对象
var re1 = /ABC\-001/;
var re2 = new RegExp('ABC\\-001');//因为字符串的转义问题,字符串的两个\\实际上是一个\,字符串中的反斜杠有特殊含义
re.test('010-12345'); // true RegExp对象的test()方法用于测试给定的字符串是否符合条件。
要做更精确地匹配,可以用[]表示范围
用逗号切分字符串
'a,b;; c d'.split(/[\s\,\;]+/); // ['a', 'b', 'c', 'd'] \s表示空格
分组
用()表示的就是要提取的分组(Group)
如果正则表达式中定义了组,就可以在RegExp对象上用exec()方法提取出子串来
var re = /^(\d{3})-(\d{3,8})$/;
re.exec('010-12345'); // ['010-12345', '010', '12345']
exec()方法在匹配成功后,会返回一个Array,第一个元素是正则表达式匹配到的整个字符串,后面的字符串表示匹配成功的子串。
exec()方法在匹配失败时返回null
贪婪匹配
正则匹配默认是贪婪匹配,也就是匹配尽可能多的字符
必须让\d+采用非贪婪匹配(也就是尽可能少匹配),才能把后面的0匹配出来,加个?就可以让\d+采用非贪婪匹配
全局搜索
为什么
正常情况,正则只匹配一次,如果要匹配多次,需要用全局搜索
怎么做到全局搜索
最常用的是g,表示全局匹配
var s = 'JavaScript, VBScript, JScript and ECMAScript';
var re=/[a-zA-Z]+Script/g;
// 使用全局匹配:
re.exec(s); // ['JavaScript']
re.lastIndex; // 10
re.exec(s); // ['VBScript']
re.lastIndex; // 20
全局匹配可以多次执行exec()方法来搜索一个匹配的字符串。
当我们指定g标志后,每次运行exec(),正则表达式本身会更新lastIndex属性,表示上次匹配到的最后索引
全局匹配类似搜索,因此不能使用/^...$/,那样只会最多匹配一次
正则表达式还可以指定i标志,表示忽略大小写,m标志,表示执行多行匹配。
正则表达式
regExp
RegExp 对象有 3 个方法:test()、exec() 以及 compile()。
var patt1=new RegExp("e");
patt1.test("The best things in life are free")//test() 方法检索字符串中的指定值。返回值是 true 或 false。
document.write(patt1.exec("The best things in life are free")); //exec() 方法检索字符串中的指定值。返回值是被找到的值。如果没有发现匹配,则返回 null。
var patt1=new RegExp("e");
document.write(patt1.test("The best things in life are free"));
patt1.compile("d");//compile() 方法用于改变 RegExp。compile() 既可以改变检索模式,也可以添加或删除第二个参数。
document.write(patt1.test("The best things in life are free"));特殊元字符
\d 0~9任意一个数字
\D 非0~9之间的任意字符
\w 字母、数字或下划线 [a-zA-Z0-9_]
\W 非......
\s 匹配任意一个空白字符 (包括制表符)
\b 匹配边界符 "hello-world"
\n 匹配一个换行符
\ 转义字符 \. 只表示一个小数点
. 表示除了\n之外的任意字符
^ 以某个字符开头
$ 以某个字符结尾
a|b a或者b任意一个
[158] [abc] a或b或c任意一个
[^abc] 除了a\b\c之外的
[a-z] 表示a到z中任意一个字母 [0-9]等价于\d
[^a-z]
() 分组
(?:) 当前分组只匹配不捕获
量词元字符
*出现零到多次 等价于 {0,}
? 出现零到一次 等价于 {0,1}
+ 出现一次到多次 等价于 {1,}
{m} 出现m次
{m,} 出现至少m次
{m,n} 出现m~n次
* 修饰符 i ignoreCase 忽略大小写
* g global 全局匹配
* m multiline 多行匹配
*
*/
// 正则定义 var arr = [] 或var arr = new Array()
// 1 正则字面量
var reg = /\d123/g;
console.log(typeof reg);
// 2 new创建
var reg2 = new RegExp("\\d","g");
console.log(reg2);