RegExp
? 在正则表达式中,如果直接给出字符,就是精确匹配。用
要匹配变长的字符,在正则表达式中,用 来看一个复杂的例子: 我们来从左到右解读一下:
综合起来,上面的正则表达式可以匹配以任意个空格隔开的带区号的电话号码。 如果要匹配 但是,仍然无法匹配 进阶要做更精确地匹配,可以用
你可能注意到了, RegExp有了准备知识,我们就可以在JavaScript中使用正则表达式了。 JavaScript有两种方式创建一个正则表达式: 第一种方式是直接通过 两种写法是一样的: var re1 = /ABC-001/; var re2 = new RegExp(‘ABC-001‘); re1; // /ABC-001/ re2; // /ABC-001/
注意,如果使用第二种写法,因为字符串的转义问题,字符串的两个 先看看如何判断正则表达式是否匹配: var re = /^d{3}-d{3,8}$/; re.test(‘010-12345‘); // true re.test(‘010-1234x‘); // false re.test(‘010 12345‘); // false
RegExp对象的 切分字符串用正则表达式切分字符串比用固定的字符更灵活,请看正常的切分代码: ‘a b c‘.split(‘ ‘); // [‘a‘,‘b‘,‘‘,‘c‘]
嗯,无法识别连续的空格,用正则表达式试试: ‘a b c‘.split(/s+/); // [‘a‘,‘c‘]
无论多少个空格都可以正常分割。加入 ‘a,b,c d‘.split(/[s,]+/); // [‘a‘,‘c‘,‘d‘]
再加入 ‘a,b;; c d‘.split(/[s,;]+/); // [‘a‘,‘d‘]
如果用户输入了一组标签,下次记得用正则表达式来把不规范的输入转化成正确的数组。 分组除了简单地判断是否匹配之外,正则表达式还有提取子串的强大功能。用
var re = /^(d{3})-(d{3,8})$/; re.exec(‘010-12345‘); // [‘010-12345‘,‘010‘,‘12345‘] re.exec(‘010 12345‘); // null
如果正则表达式中定义了组,就可以在
提取子串非常有用。来看一个更凶残的例子: var re = /^(0[0-9]|1[0-9]|2[0-3]|[0-9]):(0[0-9]|1[0-9]|2[0-9]|3[0-9]|4[0-9]|5[0-9]|[0-9]):(0[0-9]|1[0-9]|2[0-9]|3[0-9]|4[0-9]|5[0-9]|[0-9])$/; re.exec(‘19:05:30‘); // [‘19:05:30‘,‘19‘,‘05‘,‘30‘]
这个正则表达式可以直接识别合法的时间。但是有些时候,用正则表达式也无法做到完全验证,比如识别日期: var re = /^(0[1-9]|1[0-2]|[0-9])-(0[1-9]|1[0-9]|2[0-9]|3[0-1]|[0-9])$/;
对于 贪婪匹配需要特别指出的是,正则匹配默认是贪婪匹配,也就是匹配尽可能多的字符。举例如下,匹配出数字后面的 var re = /^(d+)(0*)$/; re.exec(‘102300‘); // [‘102300‘,‘102300‘,‘‘]
由于 必须让 var re = /^(d+?)(0*)$/; re.exec(‘102300‘); // [‘102300‘,‘1023‘,‘00‘]
全局搜索JavaScript的正则表达式还有几个特殊的标志,最常用的是 var r1 = /test/g; // 等价于: var r2 = new RegExp(‘test‘,‘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 re.exec(s); // [‘JScript‘] re.lastIndex; // 29 re.exec(s); // [‘ECMAScript‘] re.lastIndex; // 44 re.exec(s); // null,直到结束仍没有匹配到
全局匹配类似搜索,因此不能使用 正则表达式还可以指定 小结正则表达式非常强大,要在短短的一节里讲完是不可能的。要讲清楚正则的所有内容,可以写一本厚厚的书了。如果你经常遇到正则表达式的问题,你可能需要一本正则表达式的参考书。 ? ? 友情链接1:https://www.liaoxuefeng.com/wiki/001434446689867b27157e896e74d51a89c25cc8b43bdb3000/001434499503920bb7b42ff6627420da2ceae4babf6c4f2000 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |