一、正则表达式创建

  1. //第一种方法
  2. var reg = /pattern/
  3. //第二种方法
  4. var reg = new RegExp('pattern')

test()

test方法仅仅检查是否能够匹配str, 并且返回布尔值以表示是否成功。

  1. function testReg(reg, str){
  2. var result = reg.test(str);
  3. alert(result)
  4. }
  5. var reg = /b/
  6. var str = 'bbs.bjl'
  7. testReg(reg,str) //true

match()

返回匹配的字符串。
如果没有设置g修饰符的正则表达式在完成一次成功的匹配后会停止。
如果设置了g修饰符的正则表达式在完成一次成功的匹配后不会停止,直至找出全部符合条件的字符串

  1. function matchReg(reg,str){
  2. var result = str.match(reg)
  3. alert(result)
  4. }
  5. var reg = /./g
  6. var str = bb\ns.blue
  7. matchReg(reg,str) //['b', 'b', 's', '.', 'b', 'l', 'u', 'e']
  8. var reg = /./
  9. var str = bb\ns.blue
  10. matchReg(reg,str) //['b', index: 0, input: 'bb\ns.blue', groups: undefined]

replace()

形式:str.replace(reg,’new str’);
它的作用是将str字符串中匹配reg的部分用‘new str”部分代码。值得注意的是原字符串并不会被修改,而是作为返回值被返回。

  1. var reg = /b/ //只有第一个被替换。
  2. var str = 'bbs.blueidea.com';
  3. var newStr = str.replace(reg,'c')
  4. console.log(newStr) //cbs.blueidea.com
  5. var reg = /b/g //所有都被替换
  6. var str = 'bbs.blueidea.com';
  7. var newStr = str.replace(reg,'c') //ccs.clueidea.com

在replace函数中使用$引用子正则表达式匹配的内容

  1. var reg = /(\w+).(\w+).(\w+)/
  2. var str = 'bbs.blueidea.com';
  3. var newStr = str.replace(reg,'$1.$1.$1')
  4. console.log(newStr) //bbs.bbs.bbs
  5. var reg = /(\w+).(\w+).(\w+)/
  6. var str = 'bbs.blueidea.com';
  7. var newStr = str.replace(reg,'$1.$2.$3')
  8. console.log(newStr) //bbs.blueidea.com

search()和split()

search 返回正则表达式第一次匹配的位置
split 返回分割后的数组

  1. var reg = /idea/
  2. var str = 'blueidea'
  3. var pos = str.search(reg)
  4. console.log(pos) //4
  5. var reg = /\W/
  6. var str = 'bbs.blueidea.com'
  7. var arr = str.split(reg)
  8. console.log(arr)//[bbs,blueidea,com]

exec()

exec()返回正则正则表达式所匹配的内容。返回的array[0]为匹配的内容。array[1]为子正则表达式匹配的内容,在后面同array[1]。

  1. var reg = /test/
  2. var str = 'testString'
  3. var result = reg.exec(str)
  4. alert(result) //test

练习

1. exec方法和限定符的搭配
  • c{n} 匹配n个
  • c{m,n} 表示m个到n个c, 且m小于等于n
  • c{n,} 表示1个以上的c
  • *,+,?

    1. *表示0次或者多次,等同于{0,},即c*和c{0,}是一个意思<br /> +表示一次或者多次,等同于{1,},即c+和c{1,}是一个意思<br /> ?表示0次或者1次,等同于{01},即c? c{0,1}是一个意思
  • /^开头,结尾$/

    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

  1. <a name="berFC"></a>
  2. ###### 2. 点‘ . ’会匹配字符串中除了换行符\n之外的所有字符
  3. ```javascript
  4. reg = /./
  5. str = 'cainiao'
  6. execReg(reg,str) 正则匹配到了字符c
  7. reg = /./
  8. str = 'blueidea'
  9. execReg(reg,str) //b
  10. reg = /.+/
  11. str = 'blueidea--经典论坛 好_。'
  12. execReg(reg, str) //'blueidea--经典论坛 好_。'
  13. reg = /.+/
  14. str = 'bbs.blueieda.com'
  15. execReg(reg,str)

3. ‘|’ 二选一,正则表达式中的或。

b|c表示,匹配b 或者c

  1. reg = /b|c/
  2. str = 'blueidea'
  3. execReg(reg,str) //b
  4. reg = /^b|c.+/
  5. str = 'cainiao'
  6. execReg(reg,str) //'cainiao'
  7. reg = /^b|c.+/
  8. str = 'bbs.blueidea.com'
  9. execReg(reg,str) //b

4. ()括号 我们正则表达式内括号里写的内容会被认为是子正则表达式,所匹配的结果也会被记录下来供后面使用。
  1. var reg = /^[b|c].+/
  2. var str = 'bbc.blueidea.com'
  3. execReg(reg,str) //[bbc.blueidea.com]
  4. var reg = /^(b|c).+/
  5. var str = 'bbc.blueidea.com'
  6. let c = execReg(reg,str) //['bbc.blueidea.com', 'b']

5. 字符集合【abc】 表示a或b或c中的任意一个字符
  1. reg = /^[abc]/
  2. str = 'test'
  3. execReg(reg, str) //null
  4. //正则的意思是开头可以是英文字母,后面可以是英文字母或者数字以及下划线
  5. reg = /^[a-zA-Z][a-zA-Z0-9_]+/
  6. str = 'test'
  7. execReg(reg,str)

6. 反字符集合[^abc] :^在正则表达式中开始部分的时候表示开头的意思;但是在字符集中 他表示的是类似‘非’的意思

[^abc]就表示不能是a,b或者c中的任何一个

  1. reg = /[^abc]/
  2. str = 'blueidea'
  3. execReg(reg, str) //l 匹配第二个字母
  4. reg = /[^abc]/
  5. str = 'cainiao'
  6. execReg(reg,str) //i

7. 边界与非边界

/b表示的是边界的意思。也就是说,只有字符串的开头和结尾才算数。例如 /\bc/表示字符串开始的c或者是结尾的c。

  1. reg = /\bc/
  2. str = 'cainiao'
  3. execReg(reg, str) //c 匹配到了左边界的c字符。
  4. reg = /\bc/
  5. str = '???c'
  6. execReg(reg, str) //c 匹配到了右边界的c字符。
  7. reg = /\bc/
  8. str = bcb'
  9. execReg(reg, str) //c 匹配失败,因为bcb字符串中的c被夹在中间,既不在左边界也不再右边界。

/B 非边界

  1. reg = /\Bc/
  2. str = 'bcb'
  3. execReg(reg,str) //c
  4. regreg = /\Bc/
  5. str = 'cainiao'
  6. execReg(reg,str) //null

8. 数字与非数字

/d 表示数字,相反,\D表示非数字。

  1. reg = /\d/
  2. str = 'cainiao8'
  3. execReg(reg,str) //8
  4. reg = /\D/
  5. str = 'cainiao8'
  6. execReg(reg,str) //C

9. 空白与非空白

\f换页符 \n换页符 \r回车 \t制表符 \v垂直制表符 。
\s单个空格,等同于[\f\n \r \t \v]

  1. reg = /\s.+/
  2. str = 'This is a test String.';
  3. execReg(reg, str) //is a test String.

\S表示非空格字符

  1. reg = /\S+/
  2. str = 'This is a test String.';
  3. execReg(reg, str) //This

10. 单词字符 \w等同于[a-zA-Z0-9]
  1. reg = /\w+/
  2. str = '.blueidea';
  3. execReg(reg, str) //['blueidea']
  4. reg = /\w+/
  5. str = '是的idea';
  6. execReg(reg, str) //['idea']

11. 非单词字符\W 等效于[^a-zA-Z0-9]
  1. reg = /\W+/
  2. str = '是的??idea';
  3. execReg(reg, str) //['是的??']

12. 反向引用 ?

形式如下:/(子正则表达式)\l/
\1 是等同于‘第一个括号里匹配的内容’,而不是‘第一个括号的内容’
\2 是等同于‘第2个括号里匹配的内容’,而不是‘第2个括号的内容’

  1. reg = /(\w)\1/
  2. str = 'brs.blueidea.com'
  3. execReg(reg,str) //bb
  4. reg = /(\w)(0-9)\1/
  5. str = 'brs.blueidea.com'
  6. execReg(reg,str) //bb

13. 括号()

14. 正向预查

15. ?!

16. 匹配元字符

什么是元字符 :* + ?
匹配元字符时,只要在前面加上一个‘\’就可以了。
如果想用$这个字符的话,需要写成$$

  1. reg = /c*/
  2. str = 'c*'
  3. execReg(reg,str) //c
  4. reg = /c\*/
  5. str = 'c*'
  6. execReg(reg,str) //c*

17. 正则表达式的修饰符 g i

全局匹配 ,修饰符g
不区分大小写,修饰符i
行首行尾,修饰符m

  1. 形式:/pattern/g
  2. reg = /b/g