本文主要爲筆者在學習JavaScript正則過程當中的一點學習筆記,主要講述JavaScript的正則表達式及其相關,包含String的match、replace、search和split方法。javascript
var reg = /abc/;
var reg = new RegExp("abc");
字符 | 含義 |
---|---|
^ | 匹配字符串的開始。若是多行標示被設爲true,同時匹配換行後緊跟的字符 |
$ | 匹配字符串的結尾。若是多行標示被設爲true,同時匹配換行前緊跟的字符 |
* | 匹配前一個字符0次或者是屢次 |
+ | 匹配前一個字符1次或者屢次,等同於{1,} |
? | 匹配前一個字符0次或者1次,等同於{0,1} |
. | 匹配任何除了新一行開頭字符的任何單個字符 /.n/將會匹配」an apple is on the tree」中的「an」和「on」,不匹配「nay」 |
(x) | 匹配‘x’而且記住匹配項,即捕獲分組.匹配到子字符串能夠經過結果數組的[1],…,[n]進行訪問 |
(?:x) | 匹配‘x’可是不記住匹配項,即非捕獲分組.匹配到子字符串不能經過結果數組的[1],…,[n]進行訪問,性能略高 |
x(?=y) | 匹配‘x’僅僅當‘x’後面跟着‘y’,可是不記住‘y’。正向確定查找,非捕獲分組的一種 |
x(?!y) | 匹配‘x’僅僅當‘x’後面不跟着‘y’,不記住‘y’。正向否認查找,非捕獲分組的一種 |
x|y | 匹配‘x’或‘y’ |
{n} | n是正整數,匹配前面一個字符恰好發生了n次 |
{n,m} | n,m都是正整數。匹配前面的字符至少n次,最多m次。若是n或者m的值是0,這個值被忽略 |
[xyz] | 匹配方括號中的任意字符。可使用破折號(-)來指定一個字符範圍。 |
[^xyz] | 匹配任何沒有包含在括號中的字符,可使用破折號指定一個字符範圍 |
[\b] | 匹配一個退格(U+008) |
\b | 匹配一個單詞的邊界 |
\B | 匹配一個非單詞邊界 |
\d | 匹配一個數字 |
\D | 匹配一個非數字字符 |
\s | 匹配一個空白字符,包括空格、製表符、換頁符和換行符 |
\S | 匹配一個非空白字符 |
\t | 匹配一個水平製表符 |
\v | 匹配一個垂直製表符 |
\w | 匹配一個單字字符 |
\W | 匹配一個非單子字符 |
\n | 匹配一個換行符 |
\f | 匹配一個換頁符 |
\r | 匹配一個回車符 |
\num | num 是一個正整數,返回引用到捕獲分組的副字符串。 eg/\w+(,)?\w+(!)?\w+\1\w+\2/ 匹配"beijing,the!capital,of!china" |
標誌值 | |
g | 全局搜索(global) |
m | 多行搜索(multiline) |
i | 不區分大小寫(ignoreCase) |
exec(string)
返回一個數組。eg:php
var myRe = new RegExp("d(b+)d", "g"), var myArray = myRe.exec("cdbbbdc");
屬性或索引 | 描述 | 例子中對應的值 |
---|---|---|
myArray | 匹配到的字符串和全部被捕獲的子字符串 | [「dbbbd」, ‘bbb’] |
[0] | 匹配的全部字符串 | ‘dbbdd’ |
index | 匹配到的字符串開始的索引值(以0開始) | 1 |
input | 輸入的初始字符串 | 「cdbbbdc」 |
myRe | ||
lastIndex | 下一次匹配開始的索引值(只有g參數時纔有用) | 5 |
source | 模式文本 | 「d(\b+)d」 |
test(string)
return true/false
查詢字符串裏是否有該正則的匹配css
match(RegExp)html
split(RegExp)
經過把字符串分割成子字符串來把一個string對象分割成一個字符串數組java
search(RegExp)
查看字符串對象與一個正則表達式是否匹配,返回正則表達式在字符串中首次匹配項的索引。不然,返回-1
ps:若是傳入一個非正則表達式對象,則會使用new RegExp(obj)隱式地將其裝換爲正則表達式對象。node
replace(RegExp, replace|function)
使用replacement替換string中匹配的RegExp,返回替換後的字符串,不應表原字符串。
替換字符串能夠插入下面的特殊變量名:nginx
變量名 | 表明的值 |
---|---|
$ | 插入一個」$」 |
@@bodyamp; | 插入匹配的字符串 |
|
插入當前匹配的字符串左邊的內容 |
$’ | 插入當前匹配的字符串右邊的內容 |
$n or $nn | n或nn是十進制的數字,那麼插入第n個括號匹配的字符串 |
指定一個函數做爲參數
這種狀況下,當匹配執行後,該函數就會執行,函數的返回值做爲替換字符串(上面的特殊參數在這裏不能使用)。若是正則表達式是全局匹配模式,則該function將被屢次調用,每次匹配都會被調用。
該函數的參數:git
變量名 | 表明的值 |
---|---|
match | 匹配的字符串(對應上面的@@bodyamp;) |
p1,p2,…,pn | 表明RegExp對象中第n個括號匹配的字符串(對應於上述的$1,$2…) |
offset | 匹配到的子字符串在原字符串中的偏移量。 |
string | 被匹配的原字符串 |
下面使用上面剛敘述過的正則表達式來練習下github
function test1(str) {
return str.replace(/\B(?=(?:\d{3})+$)/g, ',');
}
function test2(str) {
str.replace(/\d/g, function(val) {
return val * 2;
});
}