正则表达式

RegExp 对象用于规定在文本中检索的内容。
简单的模式可以是一个单独的字符。
更复杂的模式包括了更多的字符,并可用于解析、格式检查、替换等等。
定义量

     var pattern=/a$/;  //第一种
     var patterns=new RegExp("a$");   //第二种
修饰符

i:不区分大小写
g:global,全局
gi:不区分大小写的全局
m:多行的不知道跟全局有什么区别

 var att="My name is mian mian";
 var pattern=/an/g;      //global,全局
 document.write(att.match(pattern));  //an,an    
表达式

[abc]
查找方括号之间的任何字符。

[^abc]
查找任何不在方括号之间的字符。

[0-9]
查找任何从 0 至 9 的数字。

[a-z]
查找任何从小写 a 到小写 z 的字符。

[A-Z]
查找任何从大写 A 到大写 Z 的字符。

[A-z]
查找任何从大写 A 到小写 z 的字符。

[adgk]
查找给定集合内的任何字符。

[^adgk]
查找给定集合外的任何字符。

red|blue
查找任何指定的选项。

 var att="Mynameismianmianred";
 var pattern=/is|an/g;
 document.write(att.match(pattern));  //is,an,an
元字符

[.]
查找单个字符,除了换行和行结束符。
多少个点就是后面还有多少个字符
var att="Mynameismianmianred";
var pattern=/is./g;
document.write(att.match(pattern));
[\w]
查找单词字符。

[\W]
查找非单词字符。

\b单词的边界
使用单词的边界来代替真正的空格符进行匹配,可以避免如

var att=/\slanguage\s/;
    m="javascript is a 'good' language";
    document.write(m.match(att));         //null

明明是有的,却像找不到一样

    var att=/\blanguage\b/;
    m="javascript is a 'good' language";
    document.write(m.match(att));     //language

\B非单词边界,将把匹配的锚点定位在不是单词的边界之处,

     var att=/\Blanguage\B/;
    ar patt=/\Bscrip\B/;
    m="javascript is a 'good' language";
    document.write(m.match(att));     //null
    document.write(m.match(patt)) //scrip;

[\d]
查找数字。

[\D]
查找非数字字符。

[\s]
查找空白字符。

[\S]
查找非空白字符。

注意:在方括号内也可以写这些特殊转义符,但是跟不用方括号的时候有一点点小小的区别,例如:

     var att="My name is 444n";
     var pattern=/[\d\S]/g;
     document.write(att.match(pattern)); 
    //M,y,n,a,m,e,i,s,4,4,4,n

不用方括号

    var att="My name is 444n";
     var pattern=/\d\S/g;
     document.write(att.match(pattern));  //44,4n

直接的话意思就会成为是说一个数字一个非Unicode空白字符的字符,因而需要加上一个或的符号’|'

    var att="My name is 444n";
     var pattern=/\d|\S/g;
     document.write(att.match(pattern));
    //M,y,n,a,m,e,i,s,4,4,4,n

另外,转义符\b具有特殊含义,当用在字符类中的时候,它表示的是退格符,所以要在正则表达式中按照直接量表示一个退格符只需要使用一个元素的字符类/[\b]/,而如果直接写做/\b/就会表达为匹配单词界。如:

     var att="My name is 444n\b";
     var pattern=/\b/g;
     document.write(att.match(pattern));//,,,,,,,

    var pattern=/[\b]/g;
     document.write(att.match(pattern));//输出空白而不是null
重复字符语法

[n+]
匹配任何包含至少一个n 的字符串。

    var str="you are a good boy!"; 
    var patt1=/o+/g;
    document.write(str.match(patt1));   //o,oo,o

查找单词:

    var pattern=/\w+/g;    //匹配至少一个单词字符,而空格不算进内,所以就是分单词了
     document.write(att.match(pattern));  //My,name,is,444n

[n*]
匹配任何包含零个或多个 n 的字符串。

    var patt1=/o*/g;
    document.write(str.match(patt1));  
    //,o,,,,,,,,,,oo,,,,o,,,  //输出结果把其他的都忽略掉

另外,对 "l" 进行全局搜索,包括其后紧跟的一个或多个 "o",这样也可以查询一些其他的比如1开头,其后有一个或多个0的数据:

    var att="lolololllll\b";
     var pattern=/lo*/g;
    document.write(att.match(pattern));      //lo,lo,lo,l,l,l,l,l

然而需要注意的是,这些字符可能匹配0个字符,因此可能什么都不匹配。

     var att="My name is xiaomian";
     var pattern=/\z*/g;     
    if(att.match(pattern)) 
    document.write("true");    //att中未出现z,然而还是匹配成功

[n?]
匹配任何包含零个或一个 n 的字符串,使用方法与[n*]有点类似。

[n{X}]
匹配包含 X 个 n 的序列的字符串。

     var att="wo shi 小小娩 ";
     var pattern=/\S{3}/g;
    document.write(att.match(pattern));   //shi,小小娩

    var pattern=/\小{2}./g;
    document.write(att.match(pattern));   //小小娩

[n{X,Y}]
匹配包含 X 或 Y 个 n 的序列的字符串。只是一个或的关系,其他的没什么区别吧

[n{X,}]
匹配包含至少 X 个 n 的序列的字符串。

     var att="we are the best!";
     var pattern=/\S{2,}/g;
     document.write(att.match(pattern));  //we,are,the,best!

[n$]
匹配任何结尾为 n 的字符串。

    var att="we are the best!";
     var pattern=/....!$/g;
     document.write(att.match(pattern));  //best!

[^n]
匹配任何开头为 n 的字符串,与[n$]类似。

[?=n]
匹配任何其后紧接指定字符串 n 的字符串。

    var att="我是小娩";
     var pattern=/是(?=小)../g;
     document.write(att.match(pattern));   //是小娩

[?!n]
匹配任何其后没有紧接指定字符串 n 的字符串。与[?=n]类似

圆括号的作用
  • 把单独的项合成子表达式,以便可以像处理一个独立的单元那样使用|、‘、*等来对单元内的项来进行处理。例如:
    var att="javascript and java";
    var pattern=/java(script)?/g;
    console.log(att.match(pattern)); //["javascript", "java"]
  • 在完整模式中定义子模式。当一个正则表达式成功地和目标字符串相匹配时,可以从目标串中抽出和圆括号中的子模式想匹配的部分
  • 允许在同一正则表达式的后部引用前面的子表达式。
    这是通过在字符"\"后加一位或多位数字来实现的。这个数字指定了带圆括号的子表达式在正则表达式中的位置。如:
    \1引用的是第一个带圆括号的子表达式,\3引用的是第三个带圆括号的子表达式。例如:
    var att=/(java(script)?)\sis\s/ ;中(script)就可以用\2来指代
用于模式匹配的String方法

search():它的参数是一个正则表达式,返回第一个与之匹配的字串的起始位置,如果找不到匹配的字串,则会返回-1

     var patt=/\Bscrip\B/;
      m="javascript is a 'good' language";
      document.write(m.search(patt));        //4

search()不支持全局检索,在检查到第一个后就马上返回了。
replace()用来检索和替换操作。第一个参数是正则表达式,第二个参数是要进行替换的字符串
如果 regexp 具有全局标志 g,那么 replace() 方法将替换所有匹配的子串。否则,它只替换第一个匹配子串。

    var str="Visit Microsoft and Microsoft welcome you!"
    document.write(str.replace(/Microsoft/g,"W3S"));
     //Visit W3S and W3S welcome you!

$1、$2、...、$99 与 regexp 中的第 1 到第 99 个子表达式相匹配的文本。
$& 与 regexp 相匹配的子串。
$`: 位于匹配子串左侧的文本。
$': 位于匹配子串右侧的文本。
$$:直接量符号。

    name = "Doe, John";
  document.write(name.replace(/(\w+)\s*, \s*(\w+)/, "$2 $1")); //John Doe

match():它的唯一参数就是一个正则表达式,返回一个由匹配结果组成的数组。
split()方法,使用跟字符串的分割有点类似。

RegExp方法

test():如果包含匹配结果则返回true
exec():对一个指定的字符串执行一个正则表达式,返回一个数组,并提供关于本次匹配的完整信息,当具有g时,它将当前正则表达式对象的lastIndex属性设置为所指示的字符串开始检索,每次查找之前都要设置为0;

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,214评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,307评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,543评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,221评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,224评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,007评论 1 284
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,313评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,956评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,441评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,925评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,018评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,685评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,234评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,240评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,464评论 1 261
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,467评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,762评论 2 345

推荐阅读更多精彩内容