JavaScript 正则表达式操作方法

一、定义一个正则表达式

// js中定义正则表达式有两种方法:
// 1、“/正则表达式/修饰符”:
var reg1 = /hello \w{3,12}/g;
//2、“new RegExp('正则表达式', '修饰符')”:
var reg2 = new RegExp("hello \\w{3,12}", 'g');
// 其中,修饰符为可选项(可多选),有三个取值:g全局匹配、i不区分大小写、m多行匹配;

RegExp 对象自带的属性:

属性描述例子
globalRegExp 对象是否具有标志 gconsole.log(reg1.global); // true
ignoreCaseRegExp 对象是否具有标志 iconsole.log(reg1.ignoreCase); // false
multilineRegExp 对象是否具有标志 mconsole.log(reg1.multiline); // false
lastIndex一个整数,标示开始下一次匹配的字符位置console.log(reg1.lastIndex); // 0
source正则表达式的源文本console.log(reg2.source); // hello \w{3, 12}

二、调用 RegExp 对象中的方法

RegExp 对象给我们提供了三种方法供我们使用,分别是 test()、exec() 和 compile();

1、test()

检索字符串中指定的值。返回 true 或 false。这个最常用;

var reg = /hello \w{3,12}/g; // 大括号中逗号前后不能有空格

console.log(reg.test('hello hi')); // false
console.log(reg.test('hello HuJinqun')); //true

2、exec()

检索字符串中指定的值。匹配成功就返回一个数组,匹配失败就返回null;

var data = "abc123efg456";
var reg = /\d+/g;
var reg2 = /\d{4}/g;

console.log(reg.exec(data)); // [ '123', index: 3, input: 'abc123efg456', groups: undefined ]
console.log(reg2.exec(data)); // null

3、compile()

compile() 方法用于改变 RegExp。
compile() 既可以改变检索模式,也可以添加或者删除第二个参数;

var data = "abc123efg456";

var reg = /\d+/g;
console.log(reg.exec(data)); // [ '123', index: 3, input: 'abc123efg456', groups: undefined ]

reg.compile('abc');
console.log(reg.exec(data)); // [ 'abc', index: 0, input: 'abc123efg456', groups: undefined ]

reg.compile('BC', 'i');
console.log(reg.exec(data)); // [ 'bc', index: 1, input: 'abc123efg456', groups: undefined ]

reg.compile(/\d{2}/);
console.log(reg.exec(data)); // [ '12', index: 3, input: 'abc123efg456', groups: undefined ]

三、正则表达式拓展方法

除了 RegExp 对象提供方法之外,String 对象也提供了四个方法来使用正则表达式;

var data = "abc123efg456";

1、match()

在字符串内检索指定的值,匹配成功返回存放匹配结果的数组,否则返回 null。这里需要注意的一点,如果没有设置全局匹配 g,返回的数组只存放第一个成功匹配的值。

var reg = /\d+/g;
console.log(data.match(reg)); // [ '123', '456' ]

var reg2 = /\d+/;
console.log(data.match(reg2)); // [ '123', index: 3, input: 'abc123efg456', groups: undefined ]
console.log(data.match(reg2)[0]); // 123
console.log(data.match(reg2)[1]); // undefined
console.log(data.match(reg2)[2]); // undefined
console.log(data.match(reg2)[3]); // undefined

2、search()

在字符串内检索指定的值,匹配成功返回第一个匹配成功的字符串开始的位置,否则返回 -1;(返回第一个匹配到的 index)

var reg = /\d+/;

console.log(data.search(reg)); // 3
console.log(data.search(/b/)); // 1
console.log(data.search(/i/)); // -1

3、replace()

替换与正则表达式匹配的字串,并返回替换后的字符串。在不设置全局匹配 g 时,只替换第一个匹配成功的字符串片段;

console.log(data.replace('123', 'HJQ')); // abcHJQefg456
console.log(data.replace(/\d+/, 'HJQ')); // abcHJQefg456
console.log(data.replace(/\d+/gi, 'HJQ')); // abcHJQefgHJQ

var str = '<a><bbb>';
var regexp = /<(.*?)>/g;
console.log(str.replace(regexp, '[$1]')); // [a][bbb]

var str = '<a><bbb>';
var regexp = /<(a)><(b+)>/g;
console.log(str.replace(regexp, '[$2]{$1}')); // [bbb]{a}
// 说明:$1 $2 ... 代表第一个分组,第二个分组 ...

4、split()

把一个字符串分割成字符串数组;

var reg = /\d{2}/;

console.log(data.split('3')); // [ 'abc12', 'efg456' ]
console.log(data.split(reg)); // [ 'abc', '3efg', '6' ]

四、其他扩展表示

var data = 'a1B2ce3@4.5d_6f';

console.log(data.match(/[a-z](?=\d)/gi));  // [ 'a', 'B', 'e' ]
console.log(data.match(/[a-z](?!\d)/gi));  // [ 'c', 'd', 'f' ]
console.log(data.match(/(?<=[a-z])\d/gi));  // [ '1', '2', '3' ]
console.log(data.match(/(?<!\d)[a-z]+/gi));  // [ 'a', 'e' ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值