javascript 中 String 与正则相关的方法

javascript 中 String 与正则相关的方法

javascriptString 原型上有三个与正则相关的方法 searchreplacematch;

这三个方法使得我们提取字符串中的某些格式的数据提供了便利。

replace()

定义与用法

replace() 方法用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串。

语法

stringObj.replace(regexp/substr,replacement)

返回值

一个新的字符串,是用 replacement 替换了 regexp 的第一次匹配或所有匹配之后得到的。

说明

replace 是执行查找并替换的操作,它将在 stringObj 中查找与 regexp 相匹配的子串,并使用 replacement来替换这些子串。如果regexp具有全局标识符,replace将替换所有匹配的子串,否则,它只替换第一个匹配子串。
replacement 可以是字符串,也可以是函数。如果是字符串,那么每个匹配都将由字符串替换。但是replacement中的$具有特殊的含义,如下所示:

字符替换文本
$1, 2... 2... 2...n与 regexp 中的第 1 到第 n 个子表达式相匹配的文本
$&与 regexp 相匹配的子串。
$`位于匹配子串左侧的文本。
$’位于匹配子串右侧的文本。
$$直接量符号。

如果replacement 是函数,这种情况下,每一个匹配都会调用该函数,它返回的字符串作为替换文本使用。该函数的第一个参数是匹配模式的的字符串(即匹配到的完整字符串),接下来的参数是与模式中的子表达式匹配的字符串,可以有 0 个或多个这样的参数。接下来的参数是一个整数,声明了匹配在 stringObject 中出现的位置。最后一个参数是 stringObject 本身。

示例

  • replacement 中带有$的
var str = '#test1*';
str.replace(/([a-z]+)(\d+)/g, "第一个子串:($1);第二个子串:($2);子串左侧:($`);子串右侧:($');与 regexp 相匹配的子串:($&)")
//"#第一个子串:(test);第二个子串:(1);子串左侧:(#);子串右侧:(*);与 regexp 相匹配的子串:(test1)*"
  • 使用命名分组

      var str = "2018-05-21"
      var res = str.replace(/(?<year>\d+)-(?<month>\d+)-(?<day>\d+)/, '$<day>/$<month>/$<year>')
      res = "21/05/2018"
    
  • replacement 是函数的

var str = '#test1*';
str.replace(/([a-z]+)(\d+)/g,function(){
    console.log(arguments)
    return "我是替换匹配的"
})
0: "test1"  // 正则匹配到的完整字符串
1: "test"   // 匹配到的第一子串
2: "1"      // 匹配到的第二个子串
3: 1        // 当前完整匹配在原字符串中的位置
4: "#test1*" // 原字符串

match()

定义与用法

match() 方法可在字符串内检索指定的值,或找到一个或多个正则表达式的匹配。

语法

    stringObject.match(searchvalue)
    stringObject.match(regexp)

返回值

存放匹配结果的数组。该数组的内容依赖于 regexp 是否具有全局标志 g。若没有匹配,返回null

  • 如果 regexp 有标志 g

    match() 方法将执行全局检索,找到 stringObject 中的所有匹配子字符串。若没有找到任何匹配的子串,则返回 null。如果找到了一个或多个匹配子串,则返回一个数组。不过全局匹配返回的数组的内容与前者大不相同,它的数组元素中存放的是 stringObject 中所有的匹配子串,而且也没有 index 属性或 input 属性。

        var str = "2018-05-21";
        var match = str.match(/\d+/g)
        //  返回值
        0: "2018"
        1: "05"
        2: "21"
    
  • 如果 regexp 没有标志 g

    match() 方法就只能在 stringObject 中执行一次匹配。如果没有找到任何匹配的文本, match() 将返回 null。否则,它将返回一个数组,其中存放了与它找到的匹配文本有关的信息

        var str = "test444";
        var match = str.match(/\d+/)
        //  返回值
        0: "444"  // 匹配到的字串
        groups: undefined
        index: 4  // 字串的开始索引
        input: "test444" // 原字符串
    

    我们注意到上面有个 groups 的字段为 undefined;
    这是正则的命名捕获分组 (?<name>reg)

        var str = "2018-05-21";
        var match = str.match(/(?<year>\d+)-(?<month>\d+)-(?<day>\d+)/)
        //  返回值
        0: "2018-05-21"
        1: "2018"
        2: "05"
        3: "21"
        groups: {year: "2018", month: "05", day: "21"}
        index: 0
        input: "2018-05-21"
    

search()

定义和用法

search() 方法用于检索字符串中指定的子字符串,或检索与正则表达式相匹配的子字符串。

返回值

stringObject 中第一个与 regexp 相匹配的子串的起始位置。

注释:如果没有找到任何匹配的子串,则返回 -1。

说明

search() 方法不执行全局匹配,它将忽略标志 g。它同时忽略 regexp 的 lastIndex 属性,并且总是从字符串的开始进行检索,这意味着它总是返回 stringObject 的第一个匹配的位置。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值