- 一、正则表达式创建
- test()
- match()
- replace()
- search()和split()
- exec()
- 练习
- 1. exec方法和限定符的搭配
- 3. ‘|’ 二选一,正则表达式中的或。
- 4. ()括号 我们正则表达式内括号里写的内容会被认为是子正则表达式,所匹配的结果也会被记录下来供后面使用。
- 5. 字符集合【abc】 表示a或b或c中的任意一个字符
- 6. 反字符集合[^abc] :^在正则表达式中开始部分的时候表示开头的意思;但是在字符集中 他表示的是类似‘非’的意思
- 7. 边界与非边界
- 8. 数字与非数字
- 9. 空白与非空白
- 10. 单词字符 \w等同于[a-zA-Z0-9]
- 11. 非单词字符\W 等效于[^a-zA-Z0-9]
- 12. 反向引用 ?
- 13. 括号()
- 14. 正向预查
- 15. ?!
- 16. 匹配元字符
- 17. 正则表达式的修饰符 g i
- 练习
一、正则表达式创建
//第一种方法
var reg = /pattern/
//第二种方法
var reg = new RegExp('pattern')
test()
test方法仅仅检查是否能够匹配str, 并且返回布尔值以表示是否成功。
function testReg(reg, str){
var result = reg.test(str);
alert(result)
}
var reg = /b/
var str = 'bbs.bjl'
testReg(reg,str) //true
match()
返回匹配的字符串。
如果没有设置g修饰符的正则表达式在完成一次成功的匹配后会停止。
如果设置了g修饰符的正则表达式在完成一次成功的匹配后不会停止,直至找出全部符合条件的字符串
function matchReg(reg,str){
var result = str.match(reg)
alert(result)
}
var reg = /./g
var str = bb\ns.blue
matchReg(reg,str) //['b', 'b', 's', '.', 'b', 'l', 'u', 'e']
var reg = /./
var str = bb\ns.blue
matchReg(reg,str) //['b', index: 0, input: 'bb\ns.blue', groups: undefined]
replace()
形式:str.replace(reg,’new str’);
它的作用是将str字符串中匹配reg的部分用‘new str”部分代码。值得注意的是原字符串并不会被修改,而是作为返回值被返回。
var reg = /b/ //只有第一个被替换。
var str = 'bbs.blueidea.com';
var newStr = str.replace(reg,'c')
console.log(newStr) //cbs.blueidea.com
var reg = /b/g //所有都被替换
var str = 'bbs.blueidea.com';
var newStr = str.replace(reg,'c') //ccs.clueidea.com
在replace函数中使用$引用子正则表达式匹配的内容
var reg = /(\w+).(\w+).(\w+)/
var str = 'bbs.blueidea.com';
var newStr = str.replace(reg,'$1.$1.$1')
console.log(newStr) //bbs.bbs.bbs
var reg = /(\w+).(\w+).(\w+)/
var str = 'bbs.blueidea.com';
var newStr = str.replace(reg,'$1.$2.$3')
console.log(newStr) //bbs.blueidea.com
search()和split()
search 返回正则表达式第一次匹配的位置
split 返回分割后的数组
var reg = /idea/
var str = 'blueidea'
var pos = str.search(reg)
console.log(pos) //4
var reg = /\W/
var str = 'bbs.blueidea.com'
var arr = str.split(reg)
console.log(arr)//[bbs,blueidea,com]
exec()
exec()返回正则正则表达式所匹配的内容。返回的array[0]为匹配的内容。array[1]为子正则表达式匹配的内容,在后面同array[1]。
var reg = /test/
var str = 'testString'
var result = reg.exec(str)
alert(result) //test
练习
1. exec方法和限定符的搭配
- c{n} 匹配n个
- c{m,n} 表示m个到n个c, 且m小于等于n
- c{n,} 表示1个以上的c
*,+,?
*表示0次或者多次,等同于{0,},即c*和c{0,}是一个意思<br /> +表示一次或者多次,等同于{1,},即c+和c{1,}是一个意思<br /> ?表示0次或者1次,等同于{0,1},即c? 和c{0,1}是一个意思
/^开头,结尾$/
^表示只匹配字符串的开头<br /> $则只匹配字符串结尾的字符
```javascript function execReg(reg, str){ var result = reg.exec(str); alert(result) }
// 1. 类似indexOf方法。 var reg = /test/ var str = ‘testString’ execReg(reg,str)
// 2.c{n} 匹配n个 reg = /c{1}/ str = ‘cainiao’ execReg(reg, str) //c
reg = /c{2}/ str = ‘cainiao’ execReg(reg, str) //返回null。表示没有匹配成功
reg = /c{2}/ str = ‘ccVC???’ execReg(reg, str) //返回cc
//3.c{m,n} 表示m个到n个c, 且m小于等于n //c{3,4}的意思是,连续的3个c 或者 4个c。 //正则会尽量多匹配 reg = /c{3,4}/ str = ‘cccTest’ exceReg(reg,str) //ccc
reg = /c{3,4}/ str = ‘ccccTest’ execReg(reg, str) //cccc
// 4. c{n,} 表示1个以上的c reg = /c{1,}/ str = ‘cainiao’ execReg(reg, str) //c
reg = /c{1,}/ str = ‘cccccTest’ execReg(reg,str) //ccccc
//5. ,+,? //表示0次或者多次,等同于{0,},即c*和c{0,}是一个意思 //+表示一次或者多次,等同于{1,},即c+和c{1,}是一个意思 // ?表示0次或者1次,等同于{0,1},即c? 和c{0,1}是一个意思
//6. /^开头,结尾$/ //^表示只匹配字符串的开头 reg = /^c/ str = ‘???c’ execReg(reg,str) //结果为空,因为字符串的开头并不是c,所以匹配失败。
reg = /^c/ str = ‘cainiao’ execReg(reg,str) //返回c
// $则只匹配字符串结尾的字符, reg = /c$/ str = ‘cainiao’ execReg(reg,str) //null
reg = /c$/ str = ‘???c’ execReg(reg,str) c
<a name="berFC"></a>
###### 2. 点‘ . ’会匹配字符串中除了换行符\n之外的所有字符
```javascript
reg = /./
str = 'cainiao'
execReg(reg,str) 正则匹配到了字符c
reg = /./
str = 'blueidea'
execReg(reg,str) //b
reg = /.+/
str = 'blueidea--经典论坛 好_。'
execReg(reg, str) //'blueidea--经典论坛 好_。'
reg = /.+/
str = 'bbs.blueieda.com'
execReg(reg,str)
3. ‘|’ 二选一,正则表达式中的或。
b|c表示,匹配b 或者c
reg = /b|c/
str = 'blueidea'
execReg(reg,str) //b
reg = /^b|c.+/
str = 'cainiao'
execReg(reg,str) //'cainiao'
reg = /^b|c.+/
str = 'bbs.blueidea.com'
execReg(reg,str) //b
4. ()括号 我们正则表达式内括号里写的内容会被认为是子正则表达式,所匹配的结果也会被记录下来供后面使用。
var reg = /^[b|c].+/
var str = 'bbc.blueidea.com'
execReg(reg,str) //[bbc.blueidea.com]
var reg = /^(b|c).+/
var str = 'bbc.blueidea.com'
let c = execReg(reg,str) //['bbc.blueidea.com', 'b']
5. 字符集合【abc】 表示a或b或c中的任意一个字符
reg = /^[abc]/
str = 'test'
execReg(reg, str) //null
//正则的意思是开头可以是英文字母,后面可以是英文字母或者数字以及下划线
reg = /^[a-zA-Z][a-zA-Z0-9_]+/
str = 'test'
execReg(reg,str)
6. 反字符集合[^abc] :^在正则表达式中开始部分的时候表示开头的意思;但是在字符集中 他表示的是类似‘非’的意思
[^abc]就表示不能是a,b或者c中的任何一个
reg = /[^abc]/
str = 'blueidea'
execReg(reg, str) //l 匹配第二个字母
reg = /[^abc]/
str = 'cainiao'
execReg(reg,str) //i
7. 边界与非边界
/b表示的是边界的意思。也就是说,只有字符串的开头和结尾才算数。例如 /\bc/表示字符串开始的c或者是结尾的c。
reg = /\bc/
str = 'cainiao'
execReg(reg, str) //c 匹配到了左边界的c字符。
reg = /\bc/
str = '???c'
execReg(reg, str) //c 匹配到了右边界的c字符。
reg = /\bc/
str = bcb'
execReg(reg, str) //c 匹配失败,因为bcb字符串中的c被夹在中间,既不在左边界也不再右边界。
/B 非边界
reg = /\Bc/
str = 'bcb'
execReg(reg,str) //c
regreg = /\Bc/
str = 'cainiao'
execReg(reg,str) //null
8. 数字与非数字
/d 表示数字,相反,\D表示非数字。
reg = /\d/
str = 'cainiao8'
execReg(reg,str) //8
reg = /\D/
str = 'cainiao8'
execReg(reg,str) //C
9. 空白与非空白
\f换页符 \n换页符 \r回车 \t制表符 \v垂直制表符 。
\s单个空格,等同于[\f\n \r \t \v]
reg = /\s.+/
str = 'This is a test String.';
execReg(reg, str) //is a test String.
\S表示非空格字符
reg = /\S+/
str = 'This is a test String.';
execReg(reg, str) //This
10. 单词字符 \w等同于[a-zA-Z0-9]
reg = /\w+/
str = '.blueidea';
execReg(reg, str) //['blueidea']
reg = /\w+/
str = '是的idea';
execReg(reg, str) //['idea']
11. 非单词字符\W 等效于[^a-zA-Z0-9]
reg = /\W+/
str = '是的??idea';
execReg(reg, str) //['是的??']
12. 反向引用 ?
形式如下:/(子正则表达式)\l/
\1 是等同于‘第一个括号里匹配的内容’,而不是‘第一个括号的内容’
\2 是等同于‘第2个括号里匹配的内容’,而不是‘第2个括号的内容’
reg = /(\w)\1/
str = 'brs.blueidea.com'
execReg(reg,str) //bb
reg = /(\w)(0-9)\1/
str = 'brs.blueidea.com'
execReg(reg,str) //bb
13. 括号()
14. 正向预查
15. ?!
16. 匹配元字符
什么是元字符 :* + ?
匹配元字符时,只要在前面加上一个‘\’就可以了。
如果想用$这个字符的话,需要写成$$
reg = /c*/
str = 'c*'
execReg(reg,str) //c
reg = /c\*/
str = 'c*'
execReg(reg,str) //c*
17. 正则表达式的修饰符 g i
全局匹配 ,修饰符g
不区分大小写,修饰符i
行首行尾,修饰符m
形式:/pattern/g
reg = /b/g