String-search_match
1. search
- search 不执行全局匹配(忽略标志 g),也没有 lastIndex 属性(总是从开始位置查找)
- 返回第一个找到的索引
字符串.search(子字符串);字符串.search(非全局RegExp表达式); - 还不如用 indexOf,还能补充 lastIndex 属性
2. match
- match 可执行全局匹配,返回一个数组,存放着匹配的结果
- 有以下三种参数(子字符串/非全局/全局)
【1】子字符串
字符串.match(子字符串);
- 例子
let str = "web2.0 .net2.0"; let searchValue = "e"; let result = str.match(searchValue); console.log(result); //见返回值- 返回值
Array[1] 0:"e" index: 1 input: "web2.0 .net2.0"- 分三项 第一项:表示匹配到的字符串; 第二项:属性 index,表示匹配字符串所在的位置 第三项:属性 input,表示输入的字符串
- 分析:方法和 indexOf 一样
- 返回值
【2】非全局 RegExp 对象
字符串.match(非全局RegExp对象);
-
例子
let str = "web2.0 .net2.0"; let pattern = /(\w+)(\d).(\d)/; //没有全局标志g let result = str.match(pattern); console.log(result); //见返回值 console.log(result[1]); //web-
返回值
Array[4] 0:"web2.0" 1:"web" 2:"2" 3:"0" index: 0 input: "web2.0 .net2.0" length: 4-
分四部分
-
第一部分:表示匹配到的字符串结果组(0-3)
- 0:web2.0,与整个模式匹配的结果,也就是与/(\w+)(\d).(\d)/匹配的结果;
- 后面的 3 个均为子匹配结果,均可通过 result[索引]来获取
- 1:web,与第一个匹配组匹配的结果,也就是与(\w+)匹配的结果;
- 2:2,与第二个匹配组匹配的结果,也就是与(\d)匹配的结果;
- 3:0,与第三个匹配组匹配的结果,也就是与(\d)(第二个(\d))匹配的结果;
- 0:web2.0,与整个模式匹配的结果,也就是与/(\w+)(\d).(\d)/匹配的结果;
-
第二部分:属性 index,表示第一个匹配字符串所在位置
- 可通过 result["index"]或者 result.index 来获取
-
第三部分:属性 input,表示输入的字符串
-
第四部分:属性 length,表示数组长
-
-
-
分析:方法和 RegExp 类的 exec()结果一样
-
【3】全局 RegExp 对象
字符串.match(全局RegExp对象);
-
例子
let str = "web2.0 .net2.0"; let pattern = /(\w+)(\d).(\d)/g; //有全局标志g let result = str.match(pattern); console.log(result); //见返回值 console.log(result[1]); //net2.0-
返回值
Array[2] 0:"web2.0" 1:"net2.0" length: 2- 分两部分
- 第一部分:表示匹配到的字符串结果组(0-1)
- 0:web2.0,第一个匹配项,与/(\w+)(\d).(\d)/匹配的结果;
- 1:net2.0,第二个匹配项,与/(\w+)(\d).(\d)/匹配的结果;
- 第二部分:属性 length,表示数组长
- 第一部分:表示匹配到的字符串结果组(0-1)
- 分两部分
-
分析:方法和 exec()有差异如下:
-
exec()方法每次执行时是从上次检索的终点开始检索,返回当前检索到的一个匹配项信息
- 要靠一次次手动调用,直到 lastIndex 变回 0,才算找完;
- 同时这也能得到每一次“子匹配结果、index 属性和 input 属性”的完整信息
-
match()方法执行的结果为一个包含所有匹配项的数组
- 调用一次,只要一次就找完
- 同时也不会像非全局 match 那样包括匹配的“子匹配结果、index 属性和 input 属性”
-
-