My Octopress Blog

A blogging framework for hackers.

javascript中的Regular Expression

| Comments

定义Regular Expression

  • var regular = /abc/;
  • var regular=new RegExp("\\d+");

为什么在使用new的时候要多加个\?

答:因为js在解析字符串的时候,总是忽略\,例如console.log("\ss")只会输出ss

特殊字符

  • []表示匹配在括号当中的任务字符
1
2
    var notABC = /[ABC]/;
    console.log('ABCBACCBBADABC'.search(notABC));//0
  • ^在[]中表示非的意思,在普通的表达式中表示字符串的开头,与^相对的就是$,表示字符串的尾
1
2
3
    var notABC = /[^ABC]/;
    console.log('ABCBACCBBADABC'.search(notABC));//10,会匹配到D
    console.log(/^A\w*D$/.test("AD"));//true
  • \w表示字母数字,包括_,\s表示匹配空格,\d表示匹配数字
1
2
    var digitSurroundedBySpace = /\s\d\w/;
    console.log('1a 2 3d'.search(digitSurroundedBySpace));//4
  • *表示匹配至少0次, +表示匹配至少1次, ?表示匹配0或者1次,.表示匹配任一字符串. {}表示匹配范围,如{2,}表示最少出现两字,{,2}最多出现两次{2,4}表示出现2到4次
1
2
3
4
5
    var parenthesizedText = /\(.*\)/;
    console.log('Its (the sloth\'s) claws were gigantic!'.search(parenthesizedText));//4

    var datePattern = /\d{1,2}\/\d\d?\/\d{4}/;    //匹配时间(XX/XX/XXXX)
    console.log("born 15/11/2003 (mother Spot): White Fang".search(datePattern));//5
  • ()表示整块的匹配
1
2
    var cartoonCrying = /boo(hoo+)+/i;
    console.log("Then, he exclaimed 'Boohooohoohooo'".match(cartoonCrying));//["Boohooohoohooo", "hooo"]

match方法会把匹配出来的字符串,以字符串数组的方式返回结果。字符串的第一个元素是匹配出来的结果,后面的元素是()匹配出来的内容

1
2
3
    //调换firstname和lastname
    var names = "Picasso, Pablo\nGauguin, Paul\nVan Gogh, Vincent";
    console.log(names.replace(/([\w ]+), ([\w ]+)/g, "$2 $1"));

$1,$2分别代表第一个,第二个块匹配,最多能有9个,即最大是$9

Comments