表達式比較數字大小_JavaScript 正則表達式
(68條消息) 表達式比較數字大小_JavaScript 正則表達式_Yutin俞廷的博客-CSDN博客
1.通用字符組(匹配任意單個字符)
d :任意數字符號
D:非數字符號
w :字母和數字符號(單詞符號)
W:非字母和數字符號
s:任意空白符號(空格,制表符,換行符等類似符號)
S:非空白符號
. :除了換行符以外的任意字符
2.特殊字符
-:連字符,指定一個字符范圍
^:脫字符,置於元素前,表示字符串起始位置
$:表示字符串結束位置
+:置於元素后,表示該元素重復一次或多次
*:置於元素后,表示該元素重復零次或者多次
?:置於元素后,表示該部分模式可選,即出現0次或者1次;當該字符緊跟在任何一個其他限制符 (*, +, ?, {n}, {n,}, {n,m}) 后面時,匹配模式是非貪婪的。非貪婪模式盡可能少的匹配所搜索的字符串,而默認的貪婪模式則盡可能多的匹配所搜索的字符串。
b:字符邊界
|:邏輯或,/d+|abc/ 表示匹配任意數字字符或者匹配字母集abc
3.特殊字符之"^"
"^"這個字符在中括號”[]”中使用的話表示字符類的否定,即不匹配這組字符集中的所有字符。這里說的是直接在”[]”中使用,不包括嵌套使用。 也就說”[]”代表的是一個字符集,”^”只有在字符集中才是反向字符集的意思。
如果不在中括號”[]”中直接使用的話就表示限定開頭,即/^2/表示以2開頭
4.特殊字符之"b"
b 可以放在正則表達式的開頭或末尾,分別表示起始邊界和結束邊界,b 修飾其后或其之前的所有字符。如上圖:/b12/ 表示匹配以12開頭的字符集,/12b/ 表示匹配以12結尾的字符集。
b 可以匹配字母、數字、漢字和下划線。
b 同時出現在正則表達式開頭和末尾表示絕對匹配,即字符集和正則表達式中的完全一致才為真。
5.正則表達式中的括號
():() 內的內容表示的是一個子表達式,() 本身不匹配任何東西,也不限制匹配任何東西,只是把括號內的內容作為同一個表達式來處理。比如 /ab+/ 中 + 字符僅僅修飾 b,即 b 重復一次或多次;而 /(ab)+/ 中 ab 作為一個整體被 + 修飾,即 ab 重復一次或多次。
[]:[] 表示匹配 [] 中的任意字符,並且特殊字符寫在 [] 會被當成普通字符來匹配。比如 /[(a+)]/ 表示匹配 "("、"a"、"+"、")" 四個字符中的任意一個。
{}:{} 一般用來表示匹配的長度,即某個模式出現的次數或次數范圍。比如,在某個元素后加上 {4},表示該元素需要出現且只能出現4次;而 {2,4} 表示該元素至少出現2次,至多出現4次,{,5} 表示0到5次,{5,} 表示至少5次。
6. 正則表達式的修飾符
g(global):全局匹配;
i(ignoreCase):匹配時不區分大小寫;
m(multiline):多行輸入將被視為多行處理(此時開始 ^ 和結尾匹配 $ 可以在每行中進行匹配);
u(unicode):對字符串采用unicode匹配。
7. 字符串replace方法
字符串有一個replace方法,用於將字符串中的一部分替換為另一個字符串,但是只能替換第一個匹配項,而JavaScript不存在replaceAll方法。
replace方法的第一個參數可以是正則表達式,默認情況下也只會替換首先匹配的項,若在正則表達式后追加 g 選項(/p/g),則會替換字符串的所有匹配項。
正則表達式后面的 i 選項表示不區分大小寫,gi 表示不區分大小寫且全局替換。
replace函數返回新值,不影響舊值;replace函數第二個參數接受一個函數, 函數的第一個參數為匹配的字符串,接下來的參數為子表達式匹配的字符串,以下使用replace實現簡易模板解析器
let data = {
name: "luojian",
isHandsome: true
}
let template = "<div><span>{{data.name}} is {{data.isHandsome ? 'handsome' : 'cute'}}</span></div>"
function templateParser(template, data){
/*
1. replace函數返回新值,不影響舊值;replace函數第二個參數接受一個函數, 函數的第一個參數為匹配的字符串,接下來的參數為子表達式匹配的字符串
如 item 為 {{data.name}}, exp 為 data.name
2. 正則表達式需要加 ? 表示非貪婪模式,即匹配到第一個 }} 處
3. new Function 接受的參數:最后一個表示函數表達式, 之前的參數表示函數接收的參數
*/
let newTemplate1 = template.replace(/{{(.+?)}}/g, function(item, exp){
let fn = new Function("data", "return " + exp)
return fn(data)
})
// 或者使用正則斷言匹配出被{{}}包裹的表達式, 替換表達式后再替換掉{{}}
// let newTemplate = template.replace(/(?<={{).+?(?=}})/g, function(item){
// let fn = new Function("data", "return " + item)
// return fn(data)
// }).replace(/[{}]/g, "")
return newTemplate
}
8.正則表達式中的斷言:用於查找某些元素之前或之后的內容
?=pattern:零寬正向先行斷言,要求已匹配字符序列之后的字符序列能夠匹配pattern。如下正則表示匹配一個或多個非空格、=、;的字符,且該字符序列后面是=。
?<=pattern:零寬正向后行斷言,要求已匹配字符序列的前面能夠匹配pattern。如下正則表示匹配前面是=號,非空格、=、;的字符序列。
?!pattern:零寬負向先行斷言,要求已匹配字符序列的后面不能匹配pattern。
?<!pattern:零寬負向后行斷言,要求已匹配字符序列的前面不能匹配pattern。
8.用於匹配重復字符的 1,2等
正則表達式中 1, 2等要和括號()一起用,1表示重復正則第一個圓括號匹配到的內容,2表示重復正則第二個圓括號匹配到的內容。
([a-z])1{2}/i :{2}表示重復兩次,即匹配重復三次的字符,AAA型
2. /([a-z])1(?!1)([a-z])2/i:(?!1)為領寬負向先行斷言,用於修飾它前面的([a-z]),表示第一個([a-z])匹配到的內容后面不等於自己,匹配AABB型
9.其他(不常見)
正則表達式的exec方法以及字符串的match方法
其他正則表達式的符號可參考:https://www.cnblogs.com/yirlin/archive/2006/04/12/373222.html
————————————————
版權聲明:本文為CSDN博主「Yutin俞廷」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/weixin_31468621/article/details/112640111