您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

JavaScript RegExp

RegExp 构造创建了正则表达式对象,用于将文本与模式匹配。

RegExp 的实例用于正则表达式,利用正则表达式从字符串中匹配想要的。

正则表达式不是 JavaScript 的子,也并非 JavaScript 独有,需要学习正则表达式可以查阅相对应的文献。

创建 RegExp 实例,只需要将其当作构造使用:

var regexp = new RegExp(/^a*$/);

regexp.test('aaaa'); // true
regexp.test('a'); // true
regexp.test('a1'); // false

上面这个例子创建了规则为从开头到结尾必须是任意个a正则表达式。

注意上面的例子中实际上是把正则表达式字面量作为参数传递给了 RegExp 构造。

test 可以用来校验某个字符串能否使用这个正则表达式匹配到目标。

如果不想传递字面量,也可以传递正则表达式字符串,这个时候不需要使用 / 包裹,而字面量是需要 / 包裹的。

var regexp = new RegExp('^a*$'); // 不需要使用 / 将表达式包裹起来

regexp.test('aaaa'); // true
regexp.test('a'); // true
regexp.test('a1'); // false

这样创建出来的和传递正则表达式字面量的一样。

传递字符串的时候还能传递第二个参数,作为正则表达式的符号,部分文献也称其为描述符。

var regexp1 = new RegExp('^a*$', 'i');
var regexp2 = new RegExp('^a*$');

var str = 'AAAAA';

console.log(regexp1.test(str)); // :true
console.log(regexp2.test(str)); // :false

符号 i 表示忽略大小写,所以 regexp2 无法在 str 中匹配到值。

如果需要多个符号,则将多个符号放在一起作为字符串即可。

var regexp = new RegExp('^a*$', 'igm');

通常构造会在不确定表达式的情况下使用,预定义好的正则表达式通常都会用字面量来表示。

正则表达式的字面量使用一对 / 进行包裹。

var regexp = /^a&/;

这里不需要引号进行包裹,使用引号就变成了字符串。

如果需要加入符号,则跟在末尾即可。

var regexp1 = /^a*$/g;
var regexp2 = /^a*$/ig;

在 ES6 之前,有三种符号。

var regexp1 = /a/g;
var regexp2 = /a/;

var str = 'abcdeabcde';

console.log(str.match(regexp1)); // 匹配到两个 a
console.log(str.match(regexp2)); // 只匹配到,并返回相应信息

可以看到,regexp1 能匹配到两个 a。

var regexp1 = /apple/i;
var regexp2 = /apple/;

var str = 'AN APPLE A DAY KEEPS THE DOCTOR AWAY.';

console.log(str.match(regexp1)); // 可以找到
console.log(str.match(regexp2)); // 找不到 :null

regexp2没有忽略大小写,所以是无法匹配到 apple 的。

多行匹配模式下,开头和末尾就不是整个字符串的开头和末尾了,而是一行的开头和末尾。

目前 ES6 提供了三种新的描述符,分别为 u(Unicode 模式),y(粘连模式),s(dotAll 模式)。

正则表达式不一定通用,可能需要结合业务的实际场景来做调整。

/(http[s]?:\/\/)?[^\s(["<,>]*\.[^\s[",><]*/
/^[0-9]*$/
/\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*/
/[\u3000-\ue\ufe10-\ufe19\ufe30-\ufe44\ufe50-\ufe6b\uff01-\uffee]/
/\d{15}(\d\d[0-9xX])?/
/^[A-Za-z]+$/
/^\d+$/
/^((-\d+)|(0+))$/
/^(\-|\+)?\d+(\.\d+)?$/
/^((2(5[0-5]|[0-4]\d))|[0-1]?\d{1,2})(\.((2(5[0-5]|[0-4]\d))|[0-1]?\d{1,2})){3}$/

正则表达式字面量需要使用 / 包裹,通常字面量会用于写死固定的正则表达式,如果需要动态,都会使用构造的方式。


联系我
置顶