2019年8月4日,JavaScript正则表达式笔记
正则表达式初学
正则表达式是一种匹配输入文本的模式,
1. 基本的正则
基本匹配
正则表达式:easy
源字符串: So easy零宽匹配
正则表达式:^(?=[aeiou])[a-z]+$
源字符串: apple^ 从位置0开始匹配
(?=[aeiou]) 匹配aeiou任何一个
[a-z]+ 匹配小写字母
$ 匹配结束贪婪匹配和非贪婪匹配
正则: {.} 贪婪 (吃多了就吐出来)
正则: {.?} 非贪婪(吃少了就多吃点)
源字符串: {233}
2. 正则的基本组成
简单元字符
. 匹配除了换行符以外任意字符,[^\n]
\w 匹配任意字母,数字或者下划线,[a-zA-Z0-9]
\s 匹配任意空白符,换页符\f 换行符\n 回车符\r 水平制表符\t 垂直制表符\v
\d 匹配数字
\un 匹配n , 一个有4个十六进制数字表示的Unicode字符限定符(表示出现次数)
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定位符和零宽断言
\b 单词边界
^ 开始位置(注意多行模式)
$ 结束位置(?=exp) 仅仅匹配右边一个位置,且不放入结果
(?!exp) 仅仅反匹配右边一个位置,且不放入结果字符簇和分歧
[abc] 表示a,b,c中的任意一个
ab|bc 表示ab或者bc反义
\W \D \S \B 就是表示对应含义的反义
[^aeiou] ^表排除分组和后向引用
(abc){5} 匹配abcabcabcabcabc
(ab|cd)123\1 匹配“ab123ab”或者“cd123cd”
3. JavaScript修饰符
g 全局匹配
i 不区分大小写
m 多行模式
4. 使用正则
创建正则表达式
var exp = /pattern/flagsRegExp上永磊匹配提取的方法-exec()
var matches = pattern.exec(str)RegExp上用来测试匹配成功与否的方法——test()
var result=pattern.test(str);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
- String类型上的模式匹配方法
match方法: str.match(pattern);
search方法: str.search(pattern);
replace方法: str.replace(RegExp or String, String or Function);
5. 示例
- 取出字符串中的第一个数字(整数或者浮点数),注意去掉多余的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));
- 将数字字符串,从尾部开始每隔三个数字加一个点分割
var str = "10fsdf833000000"; // var pattern = /\B(?=(?:\d{3})+\b)/g; var pattern = /(?=(\B)(\d{3})+$)/g; console.log(str.replace(pattern, '.'));