正则表达式(JavaScript)

来源:互联网 发布:广告投放数据分析难吗 编辑:程序博客网 时间:2024/06/04 19:29

基本字符类型
原义文本字符:代表字面本义
元字符:有特殊含义的非字符字符(* + ? $等)
字符类
字符类指的是符合某些特性的对象,一个泛指,用[]来标识。如[abc]指a或b或c。
字符类取反:使用元字符^创建反向类/负向类,标识不属于某类的内容。如[^abc]指不是字符a或b或c。
范围类
如[a-zA-Z]
预定义类

字符 等价 含义 . [^\r\n] 除了回车符和换行符之外的所有字符 \d [0-9] 数字字符 \D [^0-9] 非数字字符 \s [\t\n\x0B\f\r] 空白符 \S [^\t\n\x0B\f\r] 非空白符 \w [a-zA-Z_o-9] 单词字符(数字、字母、下划线) \W [^a-zA-Z_o-9] 非单词字符 ^ 以XXX开始 $ 以XXX结束 \b 单词边界 \B 非单词边界 ? 出现0次或一次 + 出现一次或多次 * 出现0次或多次 {n} 出现n次 {n,m} 出现n到m次 {n,} 至少出现n次

贪婪模式
/a{3,6}/ 默认会匹配6次。非贪婪模式只要在量词后加?即可,/a{3,6}?/ 只匹配3次
分组
使用()可以达到分组的功能。如/a(bc)/
使用|可以达到或的效果(把前后的正则表达式)。abc|def 表示abc或者def,ab(c|d)ef表示abcef或者abder。
分组的捕获:/(abc)d(efg)/ 1=abc,2 = efg
忽略分组的捕获:/(?:abc)d(efg)/ $1 = efg
前瞻与后顾
文本尾方向为前
前瞻:正则表达式匹配到规则的时候,向前检查是否符合断言。
后顾:正则表达式匹配到规则的时候,向后检查是否符合断言。(js不支持)

名称 规则 例子 正向前瞻 exp(?=assert) 如\w(?=\d) 匹配到字符然后再判断字符后是否为数字 负向前瞻 exp(?!assert) 如\w(?!\d) 匹配到字符然后再判断字符后是否为数字 正向后顾 exp(?<=asseert) js不支持 负向后顾 exp(? js不支持

方法
test()方法:

let reg1 = /\w/let reg2 = /\w/g     //全局匹配let result = reg1.test('ab') //结果为true或false  全局匹配需要注意lastIndex的变化 

exec()方法:
使用正则表达式对字符串进行搜索,并将更新全局RegExp对象的属性以反映匹配结果。没有匹配结果返回null,否则返回一个结果数组。
非全局调用—返回的数组中第一个元素是与正则表达式相匹配的文本,第二个元素是与RegExp的第一个子表达式相匹配的文本(如果存在),第三个元素是与RegExp的第二个子表达式相匹配的文本(如果存在),类推

let reg = /\d(\w)\d/let str = '1a2b3c4aaaaaaa'let result = reg.exec(str)/*************结果分析**************/reg.lastIndex = 0 // 非全局调用 lastIndex不起作用result.index = 0 // 第一个匹配的字符偏移量result = ['1a2','a']

全局调用
String方法
search():
用于检索字符串中指定的字符串,或者检索与正则表达式相匹配的子字符串,返回第一个匹配结果的index, 不存在返回 -1。它不执行全局匹配,会忽略g标志,并总是从字符串开始的位置进行搜索。
match():
可以检测到一个或多个与regexp匹配的文本,是否有g标志对结果影响非常的大。
非全局调用,只能在字符串中执行一次匹配。如果没有匹配到任何文本则返回null,否则返回一个数组,存放匹配到的文本信息,与exec非全局调用返回的信息一致。
全局调用,返回的数组中存放所有的匹配子串,没有index和input属性

let reg = /\d(\w)\d/glet ts = '$1a2b3c4d5e'let result = ts.match(reg) //result的值是['1a2','3c4']

split():

let ts = 'a,b,c'ts.split(',') <=> ts.split(/,/)let ts2 = 'a1b2c3d'ts2.split(/\d/) 

replace():

在线地址
工具

0 0
原创粉丝点击