圖解正則:
jex.png
regexper.png
常用示例
// 實現金錢格式化
var test1 = '1234567890'
var format = test1.replace(/\B(?=(\d{3})+(?!\d))/g, ',')
console.log(format) // 1,234,567,890
相關概念:
正則 | 描述 | 正則 | 描述 |
---|---|---|---|
\v |
匹配垂直制表符 | \r |
匹配回車 |
\S |
匹配任何非空白字符 | \s |
匹配任何空白字符,等同于[\f\n\r\t\v]
|
\W |
等價于[a-zA-Z0-9] | \w |
匹配單詞字符,等同于字符集合 [a-zA-Z0-9_]
|
\D |
除了數字之外的字符,等價于/[^0-9]/ | \d |
匹配數字,等價于[0-9] |
\f |
匹配換頁符 | \n |
匹配換行符 |
. |
匹配除了換行符(\n)之外的任意單個字符 | \t |
匹配制表符 |
^ |
表示后邊出現的數字必須在開頭 | $ |
表示前面出現的數字必須出現在結尾 |
[] |
方括號內的任意字符 | [^] |
不在方括號內的任意字符 |
{} |
表示重復次數 | 單豎線 |
選擇,匹配的是該選擇符左側或右側的表達式 |
* |
表示出現零或多次,等同于{0,} | ? |
匹配前面一個字符0次或者1次,等同于{0, 1} |
+ |
表示出現一到多次,等同于{1,} |
/{n}/ //匹配前一項n次;
/\d{3}/ //表示三個數字
/{n, m}/ //表示n-m個字符;
/\d{3,8}/ //表示3-8個數字,eg: '1234567'
/\s/ //匹配一個空格,
/\s+/ //表示至少有一個空格eg: ' '
/[0-9a-zA-Z\_]/ //匹配一個數字、字母或者下劃線
/[0-9a-zA-Z\_]+/ //匹配至少由一個數字、字母或者下劃線組成的字符串;
eg: 'a100', '0_z', 'js2015'
/[a-zA-Z\_\$][0-9a-zA-Z\_\$]*/ //匹配由字母或下劃線、$開頭,后接任意個由一個數字、字母或者下劃線、$組成的字符串;
/[a-zA-Z\_\$][0-9a-zA-Z\_\$]{0,19}/ //限制了變量的長度是1-20個字符;
/A|B/ //匹配A或B;
/[J|j]ava[S|s]cript/ //可以匹配'JavaScript' ,'Javascript', 'javaScript', 'javascript'
/^/ //表示行的開頭;
/^\d/ //表示必須以數字開頭
/$/ //表示行的結束;
/\d$/ //表示必須以數字結束
// '/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,直到結束仍沒有匹配到
字符類
將字符串單獨放進方括號內就組成了字符類,匹配它所包含的任意字符
'abcdefg'.match(/[abc]/) // ["a"]
// 連字符匹配連續的字符范圍
'abc'.match(/[a-z]/) // ["a"]
通過在左方括號插入^符號來否定字符類,匹配所有不包含在方括號內的字符
'abcdefg'.match(/[^abc]/) // ["d"]
正則創建方式:
// 方式一:
var re1 = /ABC\-001/
// 方式二:
var re2 = new RegExp('ABC\\-001')
RegExp的屬性
一. source
只讀字符串,包含正則表達式的文本
二. global
只讀boolean類型,用以說明這個正則表達式是否帶有修飾符g
三. ignoreCase
只讀boolean類型,用以說明這個正則表達式是否帶有修飾符i
四. multiline
只讀boolean類型,用以說明這個正則表達式是否帶有修飾符m
五. lastIndex
用來指定下一次匹配的起始索引
用于模式匹配的String方法
一. search(regexp)
返回第一個與之匹配的子串的起始位置,匹配不到則返回-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)
提取匹配的內容
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()
通過指定的內容將字符串拆分成數組
'1, 2, 3, 4'.split(/\s*,\s*/); // ["1", "2", "3", "4"]
五. test()
一個在字符串中測試是否匹配的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"],返回值為數組對象
待補充...