正则表达式初学

正则表达式是一种匹配输入文本的模式,

1. 基本的正则

  1. 基本匹配
    正则表达式:easy
    源字符串: So easy

  2. 零宽匹配
    正则表达式:^(?=[aeiou])[a-z]+$
    源字符串: apple

    ^ 从位置0开始匹配
    (?=[aeiou]) 匹配aeiou任何一个
    [a-z]+ 匹配小写字母
    $ 匹配结束

  3. 贪婪匹配和非贪婪匹配
    正则: {.} 贪婪 (吃多了就吐出来)
    正则: {.
    ?} 非贪婪(吃少了就多吃点)
    源字符串: {233}

2. 正则的基本组成

  1. 简单元字符
    . 匹配除了换行符以外任意字符,[^\n]
    \w 匹配任意字母,数字或者下划线,[a-zA-Z0-9]
    \s 匹配任意空白符,换页符\f 换行符\n 回车符\r 水平制表符\t 垂直制表符\v
    \d 匹配数字
    \un 匹配n , 一个有4个十六进制数字表示的Unicode字符

  2. 限定符(表示出现次数)
    a* 表示a出现次数 >= 0 次
    a+ 表示a出现次数 >= 1 次
    a? 表示a出现次数 0 次或者 1 次
    a{5} 表示a出现连续5次
    a{5,} 表示a出现连续出现次数 >= 5次
    a{5,10} 表示a出现连续出现次数为5次到10次,包括5和10

  3. 定位符和零宽断言
    \b 单词边界
    ^ 开始位置(注意多行模式)
    $ 结束位置

    (?=exp) 仅仅匹配右边一个位置,且不放入结果
    (?!exp) 仅仅反匹配右边一个位置,且不放入结果

  4. 字符簇和分歧
    [abc] 表示a,b,c中的任意一个
    ab|bc 表示ab或者bc

  5. 反义
    \W \D \S \B 就是表示对应含义的反义
    [^aeiou] ^表排除

  6. 分组和后向引用
    (abc){5} 匹配abcabcabcabcabc
    (ab|cd)123\1 匹配“ab123ab”或者“cd123cd”

3. JavaScript修饰符

g 全局匹配
i 不区分大小写
m 多行模式

4. 使用正则

  1. 创建正则表达式
    var exp = /pattern/flags

  2. RegExp上永磊匹配提取的方法-exec()
    var matches = pattern.exec(str)

  3. RegExp上用来测试匹配成功与否的方法——test()
    var result=pattern.test(str);

  4. RegExp构造函数属性

    RegExp.input或RegExp["$_"]:最近一次要匹配的字符串
    RegExp.lastMatch或RegExp["$&"]:最近一次匹配项
    RegExp.lastParen或RegExp["$+"]:最近一次匹配的捕获组
    RegExp.leftContext或RegExp["$`"]:input字符串中lastMatch之前的文本
    RegExp.rightContext或RegExp["$'"]:input字符串中lastMatch之后的文本
    RegExp["$n"]:表示第n个捕获组的内容,n取1-9
  1. String类型上的模式匹配方法
    match方法: str.match(pattern);
    search方法: str.search(pattern);
    replace方法: str.replace(RegExp or String, String or Function);

5. 示例

  1. 取出字符串中的第一个数字(整数或者浮点数),注意去掉多余的0
 var str = "R0600000.4590800n fasfd fsa34fasfds120dfasd03fdsaf000s0.3adf70.234g";
 var pattern = /(0\.\d*[1-9])|([1-9](\d|\.)*[1-9])|(0(?=[^\d\.]))/;
 console.log(str.match(pattern));
  1. 将数字字符串,从尾部开始每隔三个数字加一个点分割
var str = "10fsdf833000000";
// var pattern = /\B(?=(?:\d{3})+\b)/g;
var pattern =  /(?=(\B)(\d{3})+$)/g;
console.log(str.replace(pattern, '.'));