js——正则

转移符\

显示特殊字符,想显示\用‘\\’

\后面加特殊字母为特定用途。例: \n 换行(回车); \r  行结束(正常一个回车代表\r+\n);  \t-->tab键--> table   缩进

转移符实用场景1:

document.body.innerHTML = "<div>\
                                            <span>content</span>\
                                            <p>内容</p>\
                                        </div>"            
View Code

两种创建方式:

  • 直接量(例:var reg = /规则/正则属性[i/g/m];)推荐
  • new RegExp(“规则”, 正则属性);

属性/修饰符(可以一个或多个混合使用):

  • i 忽略大小写(ignoreCase)
  • g 全局(global)
  • m 多行匹配(在有换行符\n中匹配多行)

reg.test(); //判断字符串有没有符合要求的片段,返回true或false

str.match(reg); // 把所有符合要求的内容返回,match是字符串的方法

reg.exec(); 以reg.lastIndex的游标位置开始匹配,exec是正则表达式的方法

reg.lastIndex 与 reg.exec()相匹配,如果不加g(即不全局匹配),则lastIndex一直是0

[]   // 表达式,代表一位,其中写的是取值区间

^ 如果放在表达式中表示非(!),否则表示以什么开头; ...$表示以...结尾

(值a | 值b)  // 取值a或者值b

\w (world) ===  [0-9A-z_]

\W ===  [^\w]

\d ===  [0-9]

\D === [^\d]

\s (空白字符)  ===  [\t\n\r\v\f ]

\S === [^\s]

\b === 单词边界 例: /\bcde\b/g;

\B === 非单词边界

. === [^\r\n]

 

n+  {1, 正无穷}

n*  {0, 正无穷}

n?  {0, 1}

 

正在则表达式默认为贪婪匹配,能一次多个匹配,不会多次少个匹配。

在表达式后加?则为非贪婪匹配

 

var reg = /^\d[\w\W]*\d$/g; // 匹配首尾都是数字

 

() // 子表达式

/(\w)\1/;  // “\1”:反向引用第一个子表达式中的内容 ,即 匹配 xx

reg.exec(str); // 子表达式的值也会被加到类数组中

// 匹配aabb
var reg = /(\w)\1(\w)\2/g;

str.replace

var str = "aa";
str.replace('a', 'b'); 
console.log(str); // "ba"(不全局匹配)
var reg = /a/;
str.replace(reg, 'b'); // ba
var reg1 = /a/g;
str.replace(reg1, 'b'); //bb

例题:把aabb变成bbaa

var reg = /(\w)\1(\w)\2/g;
var str = "aabb";
str.replace(reg, "$2$2$1$1");
// $2代表第2个子表达式的内容(反向引用)
console.log(str);  // bbaa

或

str.replace(reg, function($, $1, $2){
    return $2+$2+$1+$1;
})
// 回调函数中的$表示正则表达式匹配的结果

匹配汉字: [\u4e00-\u9fa5]

匹配双字节及汉字: [^\x00-\xff]

 

正向预查(正向断言)

在表达式后加 “?” 为非贪婪匹配

(?=值) 为正向预查
var str = "abaaa";
var reg = /a(?=b)/g; // 找后面跟b的a
str.match(reg); // a

 

例题: 科学计数法(1000000.....   ==>   100.000.000)

var str = "100000000";
var reg = /(?=(\B)(\d{3})+$)/g; 
str.replace(reg, ".");

解析:
?=  // 正向预查
\B  // 非单词边界
\d  // 数字
{3}  // 3个
+ //1个或多个
$ //以...结尾(表示从后往前查)
g // 全局

例题: 去重

var str = "aaaaaabbbbbdddd";
var reg = /(\w)\1+/g;
str.replace(reg, '$1'); // abd

 

posted @ 2017-12-26 14:00  小时光  阅读(167)  评论(0编辑  收藏  举报