let evalexpr = /<%=(.+?)%>/g;
let expr = /<%([\s\s]+?)%>/g;
上面例項**中使用懶惰匹配的目的是,要找出字串中包含的所有的以<%開頭,以%>結尾的子字串,如果不是懶惰匹配那**會只返回乙個字串,舉例:
let evlexpr = /<%(.*)%>/g;
let evlexpr1 = /<%(.*?)%>/g;
let str = '<% for(let i=0; i < data.supplies.length; i++) %>';
str.replace(evlexpr,function(match));
str.replace(evlexpr1,function(match))
輸出:
"<% for(let i=0; i < data.supplies.length; i++) %>"
"<% for(let i=0; i < data.supplies.length; i++) %>"
'[/s/s]'與 '.'的區別:"."是不會匹配換行的,所有出現有換行匹配的時候,人們就習慣 使用[\s\s]或者[\w\w]這樣的完全通配模式。
模式中的 ^ 是要求被匹配的字串必須以指定字元開頭的,例如
let par = /^ad/;
let s = 'apdgx';
let s1 = 'tadniix';
let s2 = 'adjxe';
console.log(par.exec(s)); //null
console.log(par.exec(s1)); //null
console.log(par.exec(s2)); //["ad"]
$與上面問題相似,以此類推
引數有兩個 string.replace(regexp|substr, newsubstr|function)
regexp:以正規表示式作為第乙個引數,正規表示式所匹配到的子字串都將被第二個引數的返回值所替換。
substr:乙個要被newsubstr替換掉的字串(函式返回值也可以替換)。其被視為乙個整個字串,而不是乙個正規表示式,僅僅是第乙個匹配會被替換。
newsubstr:用於替換掉第乙個引數在原字串中的匹配部分的字串。該字串中可以內插一些特殊的變數名。
function:乙個用來建立新子字串的函式,該函式的返回值將替換掉第乙個引數匹配到的結果。
其中重點是了解,newsubstr 和 function :
1.newsubstr
變數名 代表的值
$$ 插入乙個 "$"。
$& 插入匹配的子串。
$` 插入當前匹配的子串左邊的內容。
$' 插入當前匹配的子串右邊的內容。
$n 假如第乙個引數是 regexp物件,並且 n 是個小於100的非負整數,那麼插入第 n 個括號匹配的字串。
舉例用法:
let s1 = 'tadniix';
let s5 = s1.replace('nii','$`'); // "tadtadx"
2.function
你可以指定乙個函式作為第二個引數。在這種情況下,當匹配執行後,該函式就會執行。函式的返回值作為替換字串(注意:上面提到的特殊替換引數在這裡不能被使用。)另外重點注意:如果第乙個引數是正規表示式,並且其為全域性匹配模式,那麼這個方法將被多次呼叫,每次匹配都會呼叫。
變數名 代表的值
match
匹配的子串。(對應於上述的$&。)
p1,p2, ...
假如replace()方法的第乙個引數是乙個regexp 物件,則代表第n個括號匹配的字串。(對應於上述的$1,$2等。)
offset
匹配到的子字串在原字串中的偏移量。(比如,如果原字串是「abcd」,匹配到的子字串是「bc」,那麼這個引數將是1)
string
被匹配的原字串。
用法:上面的變數名都是作為function的引數去使用,例一
let s1 = 'tadniix';
s1.replace('dni',function());
// 輸出(因為沒有)
[object arguments]
例二:let s1 = 'tadniix';
s1.replace(/(dni)/,function());
//輸出
[object arguments]
以上可以看出arguments對應的就是上表中的四個變數
es6正規表示式
在es5中,regexp建構函式的引數有兩種情況。第一種情況是,引數是字串,這時第二個引數表示正規表示式的修飾符 flag var regex new regexp xyz i 等價於 var regex xyz i 第二種情況是,引數是乙個正規表示式,這時會返回乙個原有正規表示式的拷貝。var r...
ES6學習 正規表示式
建構函式 y修飾符 u 修飾符 unicode匹配 console.log u 1 udb3d test udb3d udc2a true console.log u 1 udb3d u.test udb3d udc2a false unicode匹配,超過 個位元組了,加u,console.log...
ES6學習 正規表示式新特性
簡單說一下正規表示式中新加入的特性 1 flags屬性 abc ig.flags gi2 u unicode標記,chrome 48都還不支援這個標記 ud83d test ud83d udc2a true ud83d u.test ud83d udc2a false ud83d u.test ud...