正则和字符串匹配———一个正则表达式模式使用括号,将导致相应的子匹配被记住

使用括号的子字符串匹配

一个正则表达式模式使用括号,将导致相应的子匹配被记住。例如,/a(b)c /可以匹配字符串“abc”,并且记得“b”。回调这些括号中匹配的子串,使用数组元素 [1],……[n]。

使用括号匹配的子字符串的数量是无限的。返回的数组中保存所有被发现的子匹配。下面的例子说明了如何使用括号的子字符串匹配。

例子一:前后互换

下面的脚本使用 replace() 方法来转换字符串中的单词。在匹配到的替换文本中,脚本使用替代的$ 1,$ 2 表示第一个和第二个括号的子字符串匹配。

var re = /(\w+)\s(\w+)/;
var str = "John Smith";
var newstr = str.replace(re, "$2, $1");
console.log(newstr);

这个表达式作用:前后匹配到的两个文本互换;输出 “Smith, John”。

例子二
const reg = /(\d{1,})%/g
"rgba(0,0,0,20%,30%,0.1%)".replace(reg,"$1")

这个表达式输出 “rgba(0,0,0,20,30)”。

引申对比以下代码例子,理解replace
如果pattern(匹配模板字符)是字符串,则仅替换第一个匹配项
"rgba(0,0,0,20%,30%,0.1%)".replace("%","")
// 输出 :'rgba(0,0,0,20,30%,0.1%)'

如果pattern(匹配模板字符)是正则,正则所匹配的内容会被第二个参数的返回值替换掉,简单来讲替换所有的匹配项

"rgba(0,0,0,20%,30%,0.1%)".replace(/%/g,"")
// 输出 :'rgba(0,0,0,20,30,0.1)'

以上代码可以帮助我们对replace这个函数的用法可以做个深入的理解:

语法

str.replace(regexp|substr, newSubStr|function)

replace() 方法返回一个由替换值(replacement)替换部分或所有的模式(pattern)匹配项后的新字符串。模式可以是一个字符串或者一个正则表达式,替换值可以是一个字符串或者一个每次匹配都要调用的回调函数。如果pattern是字符串,则仅替换第一个匹配项。

指定一个函数作为参数

下面的例子将会使 newString 变成 'abc - 12345 - #$*%'

function replacer(match, p1, p2, p3, offset, string) {
  // p1 is nondigits, p2 digits, and p3 non-alphanumerics
  return [p1, p2, p3].join(' - ');
}
var newString = 'abc12345#$*%'.replace(/([^\d]*)(\d*)([^\w]*)/, replacer);
console.log(newString);  // abc - 12345 - #$*%
简单的例子一
const reg = /(\d{1,})%/g
"rgba(0,0,0,20%)".replace(reg,(macht,p1)=>{
    console.log(p1) // 20
    return (p1 / 100) + ""
})
// 输出 "'rgba(0,0,0,0.2)'"

以上表达式输出:‘rgba(0,0,0,0.2,0.3)’

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值