-
正则表达式应用场景 1.在IDE中使用正则表达式处理规则复杂的字符串查找、替换需求 2.在JavaScript程序设计中使用正则表达式处理字符串 3.在其他语言中 正则表达式 Regular Expression,使用单个字符串来描述、匹配一序列符合某个句法规则的字符串 简言之:就是按照某种规则去匹配符合条件的字符串,而这种规则就是正则表达式 使用正则表达式的目的: 自己先定义一种规则,然后去匹配一个字符串中符合规则的子字符串,甚至是整个字符串是否符合规则 通配符 find ./ -name *.txt 在当前目录下查找所有的txt文件 *.txt *代表任意字符 匹配邮箱的正则表达式 ^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+((\.[a-zA-Z0-9_-]{2,3}){1,2})$ 在线的正则表达式工具:http://regexper.com 语法: \b:单词边界 \bis\b .:任意字符 需要转义 \. *:0-n +: 1-n ?: 0-1 \d: 数字 \转义 匹配日期: 2006/02/03 1998-03-07 ^(\d{4})[\-](\d{2})[\-](\d{2})$ ()分组 取出:$2-$3-$1 02-03-2006 $1代表第一个小括号的内容,以此类推查看全部
-
/d 数字查看全部
-
字符串对象方法 1.search String.prototype.search(reg) search()方法用于检索字符串中指定的子字符串,或检索与正则表达式相匹配的子字符串 方法返回第一个匹配结果 index,查找不到返回 -1 search()并不执行全局匹配,它将忽略标志 g ,并且总是从字符串的开始进行检索 例子: 'A11B2C3D4'.search(/\d/) 1 2.match String.prototype.match(reg) match()方法将检索字符串,以找到一个或多个与RegExp匹配的文本 RegExp是否具有标志 g 对结果影响跟大 非全局调用,即没有 g 如果RegExp没有标志 g,那么 match()方法就只能在字符串中执行一次匹配 如果没有找到任何匹配的文本,将返回null 否则它将返回一个数组,其中存放了与它找到的匹配文本有关的信息 返回数组的第一个元素存放的是匹配文本,而其余的元素存放的是与正则表达式的子表达式匹配的文本 除了常规的数组元素之外,返回的数组还含有2个对象属性 index 声明匹配文本的起始字符在字符串的位置 input 声明对 stringObject的引用 全局调用 如果RegExp具有标志 g,则match()方法将执行全局检索,找到字符串中的所有匹配子字符串 没有找到任何匹配的子串,则返回null 如果找到了一个或多个匹配的子串,则返回一个数组 数组元素中存放地字符串中所有的匹配子串,而且也没有index 属性或input属性 3.replace String.prototype.replace(str,replaceStr) String.prototype.replace(reg,replaceStr) String.prototype.replace(reg,function) function参数含义 function会在每次匹配替换的时候调用,有四个参数 匹配字符串 正则表达式分组内容,没有分组则没有该参数 匹配项在字符串中 index 原字符串查看全部
-
正则表达式本身的两个方法 1.test RegExp.prototype.test(str) 用于测试字符串参数中是否存在匹配正则表达式模式的字符串,如果存在则返回true,否则返回false lastIndex 记录当前匹配结果的、最后一个字符的、下一个字符的位置 注意:test()方法在匹配的时候当匹配到一个结果时,会从lastIndex位置开始匹配下一个结果,直到不存在的时候才置为0。因此,当使用全局g属性标识时,当匹配到最后一个结果时,lastIndex值指向不存在的位置,此时再执行test()会返回false。 例子:多次执行test()方法,会在true、false之间循环 (/\w/g).test('a')每次执行都是正确的,但是通过实例化对象,需要很大的开销 test()方法:原意就是测试有没有、能不能匹配上,当使用test原意时,没必要加g 2.exec RegExp.prototype.exec(str) 使用正则表达式模式对字符串执行搜索,并将更新全局RegExp对象的属性一反映匹配结果 如果没有匹配的文本则返回 null,否则返回一个结果数组: - index 声明匹配文本的第一个字符位置 - input 存放被检索的字符串 string 非全局调用 调用非全局的RegExp对象的 exec()时,返回数组 第一个元素是与正则表达式相匹配的文本 第二个元素是与RegExpObject的第一个子表达式相匹配的文本(如果有的话) 第三个元素是与RegExp对象的第二个子表达式相匹配的文本(如果有的话),以此类推查看全部
-
对象属性 global:是否全文搜索,默认false ignore case:是否大小写敏感,默认是false multiline:多行搜索,默认值是false lastIndex:是当前表达式匹配内容的最后一个字符的下一个位置 source:正则表达式的文本字符串查看全部
-
前瞻 正则表达式从文本头部向尾部开始解析,文本尾部方向,成为“前” 前瞻 就是在正则表达式匹配到规则的时候,向前检查是否符合断言。比如找到儿子为张三,还得看看他的父亲是否是李四 后顾/后瞻方向相反 注意:JavaScript不支持后顾 符合特定断言称为 肯定/正向 匹配 不符合特定断言称为 否定/负向 匹配 正向前瞻 exp(?=assert) 先判断是否符合正则,再符合正则的基础上判断是否符合断言 负向前瞻 exp(?!asseret) 例如: \w(?=\d) 正向前瞻 符合断言 匹配单词字符,要求首先是一个单词,并且这个单词符合断言,后跟一个数字 'a2*3'.replace(/\w(?=\d)/g,'A') "A2*3" 'a2*3bb'.replace(/\w(?=\d)/g,'A') "A2*3bb" 断言不参与规则部分,所以不会被替换查看全部
-
分组 匹配字符串 Byron 连续出现 3 此的场景 1. 使用()可以达到分组的功能,使量词作用于分组 (Byron){3} 例子:小写字母连续出现3次 'a1b2c3d4'.replace(/[a-z]\d{3}/g,'Q'); "a1b2c3d4" 'a1b2c3d4'.replace(/([a-z]\d){3}/g,'Q'); "Qd4" 2. 或 使用 将正则表达式分成前后两部分,可以达到 或 的效果 isIS ByronCasper Byr(onCa)sper 例子: 'ByronCasper'.replace(/ByronCasper/g,'Q'); "QQ" 'ByrCasperByronsper'.replace(/Byr(onCa)sper/g,'Q'); "QQ" 3.反向引用 2015-12-25 => 12/25/2015 在分组的基础上,分组取值使用'$1 $2....'代表捕获分组内容 实现: '2015-09-09'.replace(/(\d{4})-(\d{2})-(\d{2})/g,'$2/$3/$1'); "09/09/2015" 4. 忽略分组 不希望捕获某些分组,只需要在分组内加上 ?:即可 (?:Byron).(ok) '2015-07-09'.replace(/(?:\d{4})-(\d{2})-(\d{2})/g,'$2/$3/$1'); "09/$3/07"查看全部
-
贪婪模式(默认) \d{3,6} 1234568 正则表达式在匹配时,尽可能多的匹配,直到匹配失败 '1234568'.replace(/\d{3,6}/g,'Q'); "Q8" '1234568'.replace(/\d{3,6}/,'Q'); "Q8" 非贪婪模式 正则表达式尽可能少的匹配,即一旦成功匹配就不再继续匹配 做法:在量词后加上 ? 即可 例子:'123456789'.match(/\d{3,5}?/g) ["123", "456", "789"]查看全部
-
? 出现<=1次 + 出现>=1次 * 出现任意次 {n}出现n次 {n,m}出现n到m次 {n,}出现至少n次查看全部
-
预定义类 正则表达式提供了 预定义类 匹配常见的字符类 . 等价于 [^\r\n] 表示除了回车符和换行符之外的所有的字符 \d 等价于 [0-9] 数字字符 \D 等价于 [^0-9] 非数字字符 \s 等价于 [\t\n\x0B\f\r] 空白符 s:space \S 等价于 [^\t\n\x0B\f\r] 非空白符 \w 等价于 [a-zA-Z_0-9] 单词字符(字母、数字下划线) w:word \W 等价于 [^a-zA-Z_0-9] 非单词字符 提示:大写的表示取反 例子: 匹配一个 ab+数字+任意字符 的字符串 使用范围类:ab[0-9][^\r\n] 使用预定义类:ab\d. 常见的边界匹配字符: ^ 以XXX开始 $ 以XXX结束 \b 单词边界 \B非单词边界 例子: 1. '@123@abc@'.replace(/^@./g,'Q'); "Q23@abc@" 2.'@123@abc@'.replace(/.@$/g,'Q'); "@123@abQ" 3.'@123@abc@'.replace(/.@/g,'Q'); "@12QabQ"查看全部
-
范围类 使用字符类匹配数字 [0123456789] 简写[0-9] 可以使用 [a-z] 来连接两个字符表示 从a到z的任意字符,闭区间,包含a和z本身 如: 'a1b2c3zx4z9'.replace(/[a-z]/g,'Q'); "Q1Q2Q3QQ4Q9" 在[]组成的类内部是可以连写的 [a-zA-Z] 如: 'a1b2c3zx4z9ADG'.replace(/[a-zA-Z]/g,'Q'); "Q1Q2Q3QQ4Q9QQQ" 注意: 当-在两个字符之间,表示范围,想匹配-,直接在后面加-即可 '2016-08-08'.replace(/[0-9-]/g,'Q'); "QQQQQQQQQQ"查看全部
-
字符类 一般情况下正则表达式一个字符对应字符串一个字符 表达式 ab\t 的含义是: 一个字母a一个字母b加一个水平制表符 可以使用元字符[]来构建一个简单的类,所谓类是指符合某些特征的对象,一个泛指,而不是特指某个字符 表达式[abc]:把字符 a 或 b 或 c 归为一类,表达式可以匹配这类的字符,即匹配abc中的一个 'a1b2c3d4'.replace(/[abc]/g,'字符'); "字符1字符2字符3d4" 字符类取反 使用元字符 ^ 创建 反向类/负向类,反向类的意思是:不属于某类的内容 表达式 [^abc] 表示 不是字符a或b或c 的内容 'a1b2c3d4'.replace(/[^abc]/g,'字符'); "a字符b字符c字符字符字符"查看全部
-
正则表达式由两种基本字符类型组成 1.原义文本字符:代表它原来含义的字符 例如:abc、123 2.元字符:在正则表达式中有特殊意义的非字母字符 例如:\b表示匹配单词边界,而非\b 在正则表达式中具体特殊含义的字符:* + ? $ ^ . \ () {} [] 元字符: \t:水平制表符; \v:垂直制表符; \n:换行符; \r:回车符; \0:空字符; \f:换页符; \cX:与X对应的控制字符查看全部
-
g:global 全文搜索,不添加则搜索到第一个匹配停止; i:ignore case 忽略大小写,默认大小写敏感; m:multiple lines 多行搜索查看全部
-
正则表达式的两种方法: 1.字面量 var b=/\bam\b/;在// 中间填写正则表达式 alert( "i am lily".replace(b,'AM')); //i AM lily 2.构造函数 var reg=new RegExp(/\bis\b/);或者var reg=new RegExp('\\bis\\b','g');其中g为修饰符。 alert("she is beautiful".replace(reg,"is not")); // she is not beautiful查看全部
举报
0/150
提交
取消