正则

元字符:

\t    水平制表符Tab
\v    垂直制表符

\n  换行

\r  回车

\0     空字符

\f      换页符

\cX    ctrl+X

字符类:

[]  a[ab]c=>aac、abc

[^]  表示取反

范围类:

[a-z]

预定义类及边界:

.   任意字符(除回车和换行)

\d  数字     \D  非数字

\s  空白符  \S  非空白符

\w   单词(字母、数字、下划线)  \W  非单词

\b  单词边界  \B  非单词边界

^    开始

$    结束

量词:

?      0|1,出现0次或1次
+       1+,至少出现一次

*       0|1|1+,任意次

{n}     出现n次

{n,m}  出现n~m次

{n,}    至少出现n次

贪婪模式、非贪婪模式:

\d{3,6}    贪婪模式, 尽可能最多的匹配

\d{3,6}?  非贪婪模式,最少匹配

分组:

()  分组

|   或

var str = '2013-16-17';
var re = /(\d{4})-(\d{2})-(\d{2})/g;
str = str.replace(re, ($0, $1, $2, $3) => {
    console.log($0, $1, $2, $3);      // $0: 2013-16-17    $1: 2013   $2: 16   $3: 17
    return $1 + '.' + $2 + '.' + $3
})
str = str.replace(re, '$1.$2.$3')  // 2013.16.17 

前瞻:

exp(?=assert)  正向前瞻

exp(?!assert)   负向前瞻

正向前瞻:

var str = 'a2*34vv';
var re = /\w(?=\d)/g; // 匹配(字母、数字、下划线) ,再往后看是不是(数字) , 真正的替换是\w
str.replace(re, '=');   // 结果: =2*=4vv

负向前瞻:

str.replace(/\w(?!\d)/g, '=')   // 再往后看不是数字,结果: a=*3===

  

对象属性:

global   全局,默认false,/reg/g

ignore case    忽略大小写,默认false,/reg/i

multiline  多行,默认false,/reg/m

lastIndex  匹配完的下一个位置

source  正则表达式的文本字符串

test、exec方式:

RegExp.prototype.test(str)    => reg.test(str),返回Boolean

RegExp.prototype.exec(str)   => reg.exec(str),返回Array

str = 'a1b2cc3d4'
re = /(?<firstNum>\d).(\d)/g  // 分组中的?<name>,表示为分组起个名字
re.exec(str)  // ["1b2", "1", "2", index: 1, input: "a1b2cc3d4", groups: {firNum:"1"}]

字符对象方法:

String.protoptype.search(reg)  => str.search(reg),替换

String.prototype.match(reg)    => str.match(reg), 返回Array,当没有加g时,结果和exec一样,加了g,只显示匹配的

String.prototype.split(reg)       => str.split(reg),返回Array

重复子项(\1或\2......):

re = \(a)(b)(c)/2\
re.test('abcb')   //true, 这里/2表示b,因此匹配成功

//使用场景
re = \/w/w\    //表示不同的字符,如:c9
re = \(/w)/1\  //表示相同,如:cc、99

找重复项最多的字符和个数

let str = 'aabbcccffccc';
str = str.split('').sort().join('');   // aabbccccccff

let re = /(\w)\1+/g;
let mArr = str.match(re)  // ["aa", "bb", "cccccc", "ff"]

let moreValue = ''
let len = 0

mArr.forEach((value, index) => {
    if (value.length > len) {
        len = value.length
        moreValue = value.charAt(0)
    }
})

console.log('最多的字符:' + moreValue + ',总共出现了' + len + '次');

  

 千位符正则

let num1 = 123   // 123
let num2 = 1234 // 1,234
let num3 = 12345 // 12,345
let num4 = 123456 // 123,456
let num5 = 1234567 // 1,234,567
let num6 = 1234567.00012  //1,234,567.00012


let re_int = /(\d)(?=(\d{3})+$)/g
let re_float = /(\d)(?=(\d{3})+\.)/g

function replace(num) {
    if (/\./.test(num)) {
        console.log('float')
        return num.toString().replace(re_float, ($0, $1) => {
            return $1 + ','
        })
    } else {
        console.log('int')
        return num.toString().replace(re_int, ($0, $1) => {
            return $1 + ','
        })
    }

}

  

 

 

 

 

 

posted @ 2014-05-21 21:12  joya  阅读(320)  评论(0编辑  收藏  举报