js 正则表达式部分内容

    正则表达式是一种定义字符模式的方法,我们可以拆分、查找或替换字符串中与模式字符匹配的字符。

    在js中正则表达式是通过RegExp对象使用的。RegExp对象是js中的一个内置对象,与Date,Object类似。可以通过两种方式创建新的RegExp对象。

var RegExp = /\b'|'\b/;(‘/’表示正则表达式的开始和结束,就像表示字符串开始结束的''一样)

var RegExp = new RegExp("\\b'|'\\b")

   正则表达式的“匹配”有两种概念,一种是匹配字符,一种是匹配位置,这里的\b就是匹配位置的。

    第一种方法更简短,第二种方法允许在代码执行时确定正则表达式(例如用户输入的内容作为表达式)。

    举例说明正则表达式:

var string = 'zhe,shi,yi,ge,zi,fu,chuan,zhen,de,shi,zi,fu,chuan'

    将所有的'shi'替换为'sp'

    需要查找的文本模式是简单的shi。将他表示为正则表达式:

var suiBianQiDeMingZi = /shi/;

    之后使用replace()方法替换:

suiBianQiDeMingZi = string.replace(suiBianQiDeMingZi,'sp');

    【replace()方法接受两个参数,先是RegExp对象,再是要换上的内容】

    RegExp对象默认仅查找与模式匹配的第一个子串,本例中即第一个'shi',然后停止查找,这是RegExp对象非常重要而常见的特性。(正则表达式从字符串的一端开始查找,当找到第一个匹配的子串时,就停止查找。)

    因此添加如下属性可避免这一特性:

    g全局搜索。查找所有与模式匹配的子串,而不是在找到第一个之后就停止。

    i不区分大小写搜索。

    m多行搜索。

    具体使用如下:

var suiBianQiDeMingZi = /shi/gi;(这样就会执行全局搜索并且不区分大小写)

    正则表达式的特殊字符:

\b 匹配一个单词边界,也就是指单词和空格间的位置。例如,“er\b”可以匹配“never”中的“er”,但不能匹配“verb”中的“er”。

var a = 'never'
var b = /er\b/
var c = a.replace(b,'lse')
c
=>"nevlse"

[ ] 匹配在方括号中的字符。“[abc]”可以匹配“plain”中的“a”。

var a = 'never'
var b = [er]
var c = a.replace(b,'lse')
c
=>"nevlse"

[^] 匹配未在方括号中的字符。“[^abc]”可以匹配“plain”中的“plin”。

var a = 'never'
var b = /[^nev]/
var c = a.replace(b,'lse')
c
=>"nevelse"

\d  0~9的任意数字  例如[匹配格式如1-2-3-456-78的电话号码,可使用如下正则表达式\d-\d-\d-\d\d\d-\d\d]

var a = '1,3,1,4,5,2,1,qing,ren,jie'
var b = /\d/
var c = a.replace(b,'22')
c
=>"22,3,1,4,5,2,1,qing,ren,jie"

var a = '1,3,1,4,5,2,1,qing,ren,jie'
var b = /\d/g
var c = a.replace(b,'22')
c
=>"22,22,22,22,22,22,22,qing,ren,jie"

\D  任何非数字字符

var a = ['1','3','1','4','5','2','1','qing','ren','jie']
var b = /\D/
var c = _.map(a,function(num){
    return num.replace(b,'airen')
})
c
=>["1", "3", "1", "4", "5", "2", "1", "airening", "airenen", "airenie"]

\w(小写)  匹配一个单字字符(字母[A~Z,a~z]、数字[0~9]或者下划线)。

var a = '!,@,#,$,%,6,7,8,9,0,q,r,j'
var b = /\w/g
var c = a.replace(b,'QAQ')
c
=>"!,@,#,$,%,QAQ,QAQ,QAQ,QAQ,QAQ,QAQ,QAQ,QAQ"

\W(大写)  匹配一个非单字字符。例如[^A-Z,a-z,0-9]

var a = '!,@,#,$,%,6,7,8,9,0,q,r,j'
var b = /\W/g
var c = a.replace(b,'QAQ')
c

=>"QAQ ** QAQ ** QAQ ** QAQ ** QAQ ** QAQ ** QAQ ** QAQ ** QAQ ** QAQ ** 6 ** QAQ ** 7 ** QAQ ** 8 ** QAQ ** 9 ** QAQ ** 0 ** QAQ ** q ** QAQ ** r ** QAQ ** j"( ** 仅是分隔之用)

\s(小写) 匹配一个空白字符,包括空格、制表符、换页符和换行符。

var a = '!,@,#,$,%,6,7,8,9,0,q,r,j,(这是空格),^,&,*,(,),~'
var b = /\s/g
var c = a.replace(b,'QAQ')
c
"!,@,#,$,%,6,7,8,9,0,q,r,j,QAQ,^,&,*,(,),~"

\S(大写)  匹配一个非空白字符。

var a = '!,(这是空格),(这是空格),(这是空格),w,a,n'
var b = /\S/g
var c = a.replace(b,'QAQ')
c
=>"QAQQAQ  QAQ   QAQ    QAQ ** QAQ ** QAQ ** QAQ ** QAQ ** QAQ"

{n} n是一个正整数,匹配了前面一个字符刚好发生了n次。o{2}”不能匹配“Bob”中的“o”,但是能匹配“food”中的两个o。

var a = '5,5,5,5,5,22222,QQQ'
var b = /2{5}/
var c = a.replace(b,'QAQ')
c
=>"5,5,5,5,5,QAQ,QQQ"

{n,} n是一个正整数,匹配了前面一个字符刚好发生了n次,或n次以上。“o{2,}”能匹配“foooood”中的所有o。

var a = '5,5,5,5,2,22,1,222,5,22222,1,QQQ'
var b = /2{2,}/g
var c = a.replace(b,'QAQ')
c
=>"5,5,5,5,2,QAQ,1,QAQ,5,QAQ,1,QQQ"

{n,m}  n 和 m 都是正整数。匹配前面的字符至少n次,最多m次。“o{1,3}”将匹配“fooooood”中的前三个o。如果 n 或者 m 的值是0, 这个值被忽略。

var a = '5,5,5,5,2,22,3,222,5,222TT22,QQQ'
var b = /2{2,3}/g
var c = a.replace(b,'QAQ')
c
=>"5,5,5,5,2,QAQ,3,QAQ,5,QAQTTQAQ,QQQ"

?  前一项出现0次或1次,“o{0,1}”等价于“o?”。

var a = '5,2,1'
var b = /5?/g
var c = a.replace(b,'QAQ')
c
=>"QAQ ** QAQ ** , ** QAQ ** 2 ** QAQ ** , ** QAQ ** 1 ** QAQ"

+   前一项出现1次或多次,“o{1,}”等价于“o+”。

var a = '5,5,5,5,2,22,3,222,5,222TT22,QQQ'
var b = /5+/g
var c = a.replace(b,'QAQ')
c
=>"QAQ,QAQ,QAQ,QAQ,2,22,3,222,QAQ,222TT22,QQQ"

×   前一项出现0次或多次,“o{0,}”则等价于“o*”。

ar a = '5,2,1'
var b = /5*/g
var c = a.replace(b,'QAQ')
c
=>"QAQ ** QAQ ** , ** QAQ ** 2 ** QAQ ** , ** QAQ ** 1 ** QAQ"

猜你喜欢

转载自sodler.iteye.com/blog/2356878