js正则对象

创建

方法一:字面量创建

var reg1 = /\d/

方法二: 通过 new 来声明

var reg2 = new RegExp('\d')
修饰符

通过这个例子发现,正则只匹配了第一个数字,后面的数字都没有被匹配

var str = "0q3g1";
str.replace(reg1, 'X') //Xq3g1
str.replace(reg2, 'X') //Xq3g1

如果我们想要匹配全部的数字该怎么办呢?我们可以通过修饰符来指定正则匹配的范围,修饰符有下面几种:

  • g: global 全文搜索,添加这个修饰符将会匹配文本中所有可以匹配的字符
  • i: ignore case 忽略大小写,添加以后将会同时匹配大写和小写
  • m: multiple lines 多行匹配,当文本中有换行符时,通过这个修饰符可以匹配到下面几行的内容
var reg1 = /\d/g
var reg2 = new RegExp('\d','g')
str.replace(reg1, 'X') //XqXgX
str.replace(reg2, 'X') //XqXgX

如果要同时使用多个修饰符的话,可以将修饰符连写,像这样 /\d/gim

正则对象方法

test(String) 测试字符串中是否有符合正则表达式规则的文本

const regE = /\d/
const regF = /\d/g

regE.test('1') // true
regE.test('a23') // true

regF.test('12') // true
regF.test('12') // true
regF.test('12') // false

上面的 demo 中会看到只要字符串中含有了数字,test() 就会返回 true,但是比较奇怪的是,regF在第三次调用test()时返回了false,这是因为属性lastIndex 在这里起了作用:

当第一次匹配时,匹配的字符是1,此时lastIndex=1,下一次匹配时就会从 index 为 1 的字符开始匹配(起始未0)
第二次匹配时,匹配字符是2,此时lastIndex=2
第三次匹配时,由于 index=2 的位置上没有字符,匹配不到数字,就会返回 false 了

exec(String) 使用正则的规则对字符串进行搜索,如果有匹配的文本则返回结果数组,没有则返回 null

const regG = /\d/
const regH = /\d/g

regG.exec('12') // ["1", index: 0, input: "12"]
regG.exec('12') // ["1", index: 0, input: "12"]

regH.exec('12') // ["1", index: 0, input: "12"]
regH.exec('12') // ["2", index: 1, input: "12"]
regH.exec('12') // null

返回的数组中 index 属性为当前匹配到的字符的初始位置

字符串方法

search() 可传入字符串或正则,这个方法不执行g修饰符,返回第一个匹配的字符位置,找不到返回-1

var str = "hello world";
console.log(str.search("h"));//0
console.log(str.search("0"));//-1

match() 可传入正则或字符串,如果匹配到了返回数组,未匹配到返回 null

 var str = "hello world";
 var arr = str.match("hello");
 console.log(arr);//["hello", index: 0, input: "hello world", groups: undefined]

split() 可传入正则或字符串,分割字符串

replace() 可传入正则或字符串,替换指定的文本;第二个参数可以是需要替换上的字符串,或者是一个返回字符串的回调函数,这个函数的参数有四种,依次是:

1.匹配到的字符串
2.正则的分组内容,如果没有分组就没有这个参数(如果有多个分组,就有多个对应的参数)
3.匹配的字符串的 index
4.原字符串

		var url = "rsv_sug3=28&inputT=22113&rsv_sug4=22113";
        console.log(url.replace(/=(\d+)/g, function(kw, group1, index) {
            console.log(kw, group1, index);
            return group1;
        }));
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值