logo头像

求知若渴,虚心若愚

JavaScript - 字符串(String) - 字符串方法(二)

字符串匹配方法

match()

  • 可在字符串内检索指定的值,或找到一个或多个正则表达式的匹配
  • 类似 indexOf() 和 lastIndexOf(),但是它返回指定的值,而不是字符串的位置
  • 存放匹配结果的数组,数组的内容依赖于regexp是否具有全局变量g
1
2
3
4
5
6
7
8
9
var str="123abc456def789hji8"

// 全局匹配
var arr =str.match(/\d+/g)
console.log(arr); // ["123", "456", "789", "8"]

// 非全局匹配
var arr2 =str.match(/\d+/)
console.log(arr2); // ["123", index: 0, input: "123abc456def789hji8", groups: undefined]
  • 全局匹配g

    • match() 方法将执行全局检索,找到 str中的所有匹配子字符串
    • 若没有找到任何匹配的子串,则返回 null。
    • 如果找到了一个或多个匹配子串,则返回一个数组。
  • 非全局匹配(没有g)

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

      • 该数组的第 0 个元素存放的是匹配文本,而其余的元素存放的是与正则表达式的子表达式匹配的文本。
      • 返回的数组还含有两个对象属性。

        • index 属性声明的是匹配文本的起始字符在 str 中的位置
        • input 属性声明的是对 str 的引用。

TIP

  • jQuery的init方法中就巧妙的使用了match方法
  • match()方法和exec()方法还是有不同的使用场景的,后面会讲
  • 检索字符串中指定的子字符串,或检索与正则表达式相匹配的子字符串
  • 如果没有找到任何匹配的子串,则返回 -1。
  • 返回str中第一个与 regexp 相匹配的子串的起始位置
  • search() 对大小写敏感
1
2
3
4
5
6
7
8
9
10
11
12
13
var str = "1aabbaa"

// 默认从左向右,只匹配第一次出现的
var index = str.search('aa')
console.log(index) // 1

// 配置i 忽略大小写
var index1 = str.search(/aA/i)
console.log(index1) // 1

// search对大小写敏感
var index2 = str.search(/aA/)
console.log(index2) // -1

TIP

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

  • 要执行忽略大小写的检索,请追加标志 i

replace()

  • 在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串
  • 参数
    • 参数1:可以是字符串或者是正则表达式
    • 参数2:规定了替换文本或生成替换文本的函数
  • 返回一个新的字符串
  • 默认只替换第一个匹配子串,想要全局匹配,需要g
1
2
3
4
5
6
7
8
9
10
11
12
13
14
var s = "www xuefeng666 com ww";

// 全局匹配
var re = /ww/g;
var result = s.replace(re, "a");
console.log(result); // aw xuefeng666 com a

// 匹配不到
var result2 = s.replace('demo', "a");
console.log(result2); // www xuefeng666 com ww

// 非全局匹配,只替换第一个匹配到的
var result3 = s.replace(/ww/, "a");
console.log(result3); // aw xuefeng666 com ww

split()

  • 把一个字符串分割成字符串数组
  • str.split(separator,howmany)
  • 参数:
    • separator
    • howmany
支付宝打赏 微信打赏

赞赏是对我们的肯定!