正则匹配

正则构造方式:

var  reg = new RegExp('abc','ig');
//
var  reg = /abc/ig;

常用方法:

test:

// test()
// regexp.test(string)    
console.log( /\d+/.test('ds21ds') )          // true

match:

// match()
// string.match(regexp)
// 若加上量词g则一次性捕获所有匹配的内容放到数组里返回,
// 否则,返回值是一个数组,内容包含三项,
// 分别是匹配的内容、匹配内容的起始索引、原字符串

console.log( 'ds21ds56gh'.match(/\d+/g) )        // ["21", "56"]
console.log( 'ds21ds56gh'.match(/\d+/) )         // ["21", index: 2, input: "ds21ds56gh", groups: undefined] // 或为 null

// 若有分组,则从第二个参数开始是分组内容
console.log( 'ds21ds56gh'.match(/(\d+)/g) )   // ["21", "56"]
console.log( 'ds21ds56gh'.match(/(\d+)/) )   // ["21", "21", index: 2, input: "ds21ds56gh", groups: undefined]
 

 

replace:

// replace()
// string.replace(值类型 | regexp, 值类型 | 回调函数) 
var str = "11a22b33c44d";
console.log( str.replace(/\d+/g,'_') ) // _a_b_c_d
var newStr = str.replace(/\d+/g, function ($0,$1,$2) { // 第一个形参$0 表示匹配的字符 // 第二个形参$1 表示匹配字符的起始索引 // 第三个形参$2 表示原字符串 return $0*2; }); console.log(str);//11a22b33c44d console.log(newStr);//22a44b66c88d // 若有量词,则分组里面的内容是匹配字符的最后一个字符 var newStr2 = str.replace(/(\d+)/g, function ($0,$1,$2) { // 第一个形参$0 表示匹配的字符 // 若有分组,则从第二个参数开始就是分组的内容 // 倒数第二个形参 表示匹配字符的起始索引 // 倒数第一个形参 表示原字符串 return $0*2; }) console.log(str);//11a22b33c44d console.log(newStr2);//22a44b66c88d

 

常用字符类:

\d  —— 数字。
\D —— 非数字。
\s  —— 空格符号,制表符,换行符。
\S  —— 除了 \s 。
\w  —— 拉丁字母,数字,下划线 '_'。
\W —— 除了 \w。
.    —— 任何带有 's' 标志的字符,否则为除换行符 \n之外的任何字符。

 

贪婪量词和惰性量词

贪婪模式:
       默认情况下,正则表达式引擎会尝试尽可能多地重复量词。例如,\d+ 检测所有可能的字符。当不可能检测更多(没有更多的字符或到达字符串末尾)时,然后它再匹配模式的剩余部分。如果没有匹配,则减少重复的次数(回溯),并再次尝试。

懒惰模式:

       通过在量词后添加问号 ? 来启用。在每次重复量词之前,引擎会尝试去匹配模式的剩余部分。

  在量词之后添加一个问号 '?' 来启用懒惰模式,所以匹配模式变为 *?+?,甚至将 '?' 变为 ??

 

匹配前瞻、后瞻:

x(?=y)   前瞻肯定  断言 x ,仅当后面跟着 y
x(?!y)    前瞻否定  断言 x ,仅当后面不跟 y
(?<=y)x   后瞻肯定  断言 x ,仅当跟在 y 后面
(?<!y)x    后瞻否定  断言 x ,仅当不跟在 y 后面

 

匹配标签的 src 属性:   

/\bsrc\b\s*=\s*[\'\"]?([^\'\"]*)[\'\"]?/ig

匹配 script 标签:

/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/

匹配标签:

/<[^>]*>/g

/*  
 *  使用时,
 *  str.replace(/<[^>]*>/g,'')
 */

 

posted @ 2018-12-27 11:44  晨の风  阅读(311)  评论(0编辑  收藏  举报