圖解正則:
jex.png
regexper.png
常用示例
// 實(shí)現(xiàn)金錢格式化
var test1 = '1234567890'
var format = test1.replace(/\B(?=(\d{3})+(?!\d))/g, ',')
console.log(format) // 1,234,567,890
相關(guān)概念:
正則 | 描述 | 正則 | 描述 |
---|---|---|---|
\v |
匹配垂直制表符 | \r |
匹配回車 |
\S |
匹配任何非空白字符 | \s |
匹配任何空白字符,等同于[\f\n\r\t\v]
|
\W |
等價(jià)于[a-zA-Z0-9] | \w |
匹配單詞字符址愿,等同于字符集合 [a-zA-Z0-9_]
|
\D |
除了數(shù)字之外的字符该镣,等價(jià)于/[^0-9]/ | \d |
匹配數(shù)字,等價(jià)于[0-9] |
\f |
匹配換頁(yè)符 | \n |
匹配換行符 |
. |
匹配除了換行符(\n)之外的任意單個(gè)字符 | \t |
匹配制表符 |
^ |
表示后邊出現(xiàn)的數(shù)字必須在開頭 | $ |
表示前面出現(xiàn)的數(shù)字必須出現(xiàn)在結(jié)尾 |
[] |
方括號(hào)內(nèi)的任意字符 | [^] |
不在方括號(hào)內(nèi)的任意字符 |
{} |
表示重復(fù)次數(shù) | 單豎線 |
選擇响谓,匹配的是該選擇符左側(cè)或右側(cè)的表達(dá)式 |
* |
表示出現(xiàn)零或多次损合,等同于{0,} | ? |
匹配前面一個(gè)字符0次或者1次,等同于{0, 1} |
+ |
表示出現(xiàn)一到多次娘纷,等同于{1,} |
/{n}/ //匹配前一項(xiàng)n次嫁审;
/\d{3}/ //表示三個(gè)數(shù)字
/{n, m}/ //表示n-m個(gè)字符;
/\d{3,8}/ //表示3-8個(gè)數(shù)字赖晶,eg: '1234567'
/\s/ //匹配一個(gè)空格,
/\s+/ //表示至少有一個(gè)空格eg: ' '
/[0-9a-zA-Z\_]/ //匹配一個(gè)數(shù)字律适、字母或者下劃線
/[0-9a-zA-Z\_]+/ //匹配至少由一個(gè)數(shù)字、字母或者下劃線組成的字符串遏插;
eg: 'a100', '0_z', 'js2015'
/[a-zA-Z\_\$][0-9a-zA-Z\_\$]*/ //匹配由字母或下劃線捂贿、$開頭,后接任意個(gè)由一個(gè)數(shù)字胳嘲、字母或者下劃線厂僧、$組成的字符串;
/[a-zA-Z\_\$][0-9a-zA-Z\_\$]{0,19}/ //限制了變量的長(zhǎng)度是1-20個(gè)字符了牛;
/A|B/ //匹配A或B吁系;
/[J|j]ava[S|s]cript/ //可以匹配'JavaScript' ,'Javascript', 'javaScript', 'javascript'
/^/ //表示行的開頭;
/^\d/ //表示必須以數(shù)字開頭
/$/ //表示行的結(jié)束白魂;
/\d$/ //表示必須以數(shù)字結(jié)束
// '/g' 表示全局匹配汽纤;
var s = 'JavaScript, VBScript, JScript and ECMAScript';
var re=/[a-zA-Z]+Script/g;
// 使用全局匹配:
re.exec(s); // ['JavaScript']
re.lastIndex; // 10
re.exec(s); // ['VBScript']
re.lastIndex; // 20
re.exec(s); // ['JScript']
re.lastIndex; // 29
re.exec(s); // ['ECMAScript']
re.lastIndex; // 44
re.exec(s); // null,直到結(jié)束仍沒有匹配到
字符類
將字符串單獨(dú)放進(jìn)方括號(hào)內(nèi)就組成了字符類福荸,匹配它所包含的任意字符
'abcdefg'.match(/[abc]/) // ["a"]
// 連字符匹配連續(xù)的字符范圍
'abc'.match(/[a-z]/) // ["a"]
通過在左方括號(hào)插入^符號(hào)來(lái)否定字符類蕴坪,匹配所有不包含在方括號(hào)內(nèi)的字符
'abcdefg'.match(/[^abc]/) // ["d"]
正則創(chuàng)建方式:
// 方式一:
var re1 = /ABC\-001/
// 方式二:
var re2 = new RegExp('ABC\\-001')
RegExp的屬性
一. source
只讀字符串,包含正則表達(dá)式的文本
二. global
只讀boolean類型敬锐,用以說明這個(gè)正則表達(dá)式是否帶有修飾符g
三. ignoreCase
只讀boolean類型背传,用以說明這個(gè)正則表達(dá)式是否帶有修飾符i
四. multiline
只讀boolean類型,用以說明這個(gè)正則表達(dá)式是否帶有修飾符m
五. lastIndex
用來(lái)指定下一次匹配的起始索引
用于模式匹配的String方法
一. search(regexp)
返回第一個(gè)與之匹配的子串的起始位置台夺,匹配不到則返回-1
'JavaScript'.search(/script/i); // 4
二. replace()
替換匹配到的值
var str = 'Twas the night before Xmas...';
var newstr = str.replace(/xmas/i, 'Christmas');
console.log(newstr); // Twas the night before Christmas...
三. match(regexp)
提取匹配的內(nèi)容
var str = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
var regexp = /[A-E]/gi;
var matches_array = str.match(regexp);
console.log(matches_array);
// ['A', 'B', 'C', 'D', 'E', 'a', 'b', 'c', 'd', 'e']
四. split()
通過指定的內(nèi)容將字符串拆分成數(shù)組
'1, 2, 3, 4'.split(/\s*,\s*/); // ["1", "2", "3", "4"]
五. test()
一個(gè)在字符串中測(cè)試是否匹配的RegExp方法径玖,它返回true或false。
/sales/.test('sales purchase') // true
正則例子:
- 原生js寫法:
'a b c'.split(' ') // ['a', 'b', '', '', 'c']
- 正則寫法:
'a b c'.split(/\s+/) // ['a', 'b', 'c']
- String的match方法:
"ab23839cd".match(/\d+/) // ["23839"],返回值為數(shù)組對(duì)象
待補(bǔ)充...