es6 遇到正規表示式

2021-08-21 10:33:10 字數 2357 閱讀 4621

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...