String类型对正则表达式的支持
string类型共有四种方法支持正则表达式;并且同时支持字符串匹配;
- search()
- replace()
- match()
- split()
search和match会将参数 字符串 转为 正则表达式,再匹配;
如果要匹配 ()[]
等字符,转换为正则时会失去字符本意;
replace和split则不会转换
search(regexp/substr)
search的参数:正则表达
式 或 字符串
(会通过RegExp构造函数将其转为正则)
search不支持全局:g
,支持忽略大小写 i
返回值:匹配则返回 第一个
与之匹配的子串的开始位置;未匹配返回 -1
var str = '1234abcd'
str.search('23') // 1
str.search('(23)') // 1转为正则 \(23)\
str.search('\(23\)') // 1 转为正则 /(23)/
str.search('\\(23\\)') // -1 转为正则 /\(23\)/
str.search('Ab') // -1
str.search(/Ab/i) // 4
replace(regexp/substr,replacestr)
功能1:用于对字符串进行替换,返回新字符串,不改变原字符串
var str = '1234ab2d'
str.replace(/2/gi,'H') //1H34abHd
功能2:与 ()
&
一起使用可以对匹配子串进行非完全替换
正则表达式括号()
中的内容会被记忆为 $1,$2...$n
,从1开始
& 的详细功能参考说明
//将匹配到的第一处非完全替换
str='1b2b2b2'
str.replace(/b(2)/,'U$1VW') //"1U2VWb2b2"
//不将字符串转为正则
str.replace('b(2)','U$1VW')// 1b2b2b2
功能3:第二个参数为函数,对匹配到的子串处理后替换;没有return则返回undefined
var str = '2bb3bb'
str.replace(/\d/g,function(...arr){
console.log(arr)
return 'A'
})
// ["2", 0, "2bb3bb"] 由此可见函数的每个参数是什么
// ["3", 3, "2bb3bb"]
// AbbAbb
match(regexp/substr)
以数组形式返回被匹配到的文本
全局匹配:
返回所有被匹配的子串组成的数组
var str = '1a2b3c'
str.match(/\d/g) // ["1", "2", "3"]
非全局匹配
返回数组,arr[0]是第一次被匹配到的子串
arr[n]为正则表达式括号中的值,从1开始
arr[n+1] 被匹配到的子串开始位置
arr[n+2] 做匹配的字符串
var str = '1a2b3c'
str.match(/\d/)
// ["1", index: 0, input: "1a2b3c", groups: undefined]
str.match(/a(2)b(3)/)
// ["a2b3", "2", "3", index: 1,
// input: "1a2b3c", groups: undefined]
str.match('a(2)b(3)') //先将字符串转换为正则表达式
// ["a2b3", "2", "3", index: 1,
// input: "1a2b3c", groups: undefined]
split(regexp/substr)
全局进行匹配,以匹配到的部分为分割线,将未匹配部分转为数组;返回数组
补充:indexOf()
不支持正则表达式匹配
该方法支持字符串和数组,返回匹配到的位置,或者-1
var aa = '12345'
aa.indexOf(/3/) // -1 不支持正则表达式
aa.indexOf('3') // 2