很常去搞正規化
但卻沒有認真了解裡面的事情
今天一口氣記錄
其實仔細看也沒很多(= =a)
flag
- g Global search.
- i Case-insensitive search.
- m Multi-line search.
- u unicode; treat a pattern as a sequence of unicode code points
- y Perform a “sticky” search that matches starting at the current position in the target string. See RegExp.prototype.sticky | MDN
心裡疑惑
其實我對g
這個也滿疑惑的
什麼是全域查詢
平常用 sublime 或 vscode 都沒有這個搜尋選項
m
多行模式
也讓我很疑惑,是找多行,但感覺跟g
有關係
可以找多筆
regex 101 產生 JavaScript 語法exec
怎麼可以做 while 迴圈
1 | const regex = /test/gm; |
研究結果
m
看是否需要一行一行搜尋,通常可能需要搭配g
才能找出多行資料
一般沒用m
算單行模式
從這篇來看到正則表達式之單行模式、多行模式、區分大小寫模式 - ^小七 - 博客園 備份圖
單行模式: (.)點號不匹配換行符,在 windows 中與[^\r\n]等價,並不是刻意匹配任意字符,在單行模式下會改變點號的含義,做到匹配任意字符 s
多行模式: 多行模式下^和\$的含義會被改變,普通的含義是匹配整個字符串的開頭和結尾,在多行模式下匹配的就是每一行的行首和行尾,而\A 和\Z 他們的含義始終是匹配整個字符串的開頭和結尾
再看這個範例,可以看出差異Multiple Strings - Regex Tester/Debugger
簡單來說就是^xxx$
才會看出差異
g
其實跟持續搜尋有關係(如:js),但是 php 會用不同函式(preg_match_all,preg_match),可以自己玩玩看 regex101
可參考:[ JS 进阶 ] test, exec, match, replace - kraaas 前端博客 - SegmentFault 思否
1 | var reg = /\d/; |
1 | var reg = /\d/g; |
regex 物件有 exec,test,參數是帶 string
string 型態有 match,參數是帶 regex
要注意 regex exec 跟 test 都吃g
flag
test 回傳只會傳 true,false
exec 回傳比較特殊,傳回來是一個 array
当设置全局标志的正则使用 test | MDN>)
感覺一不小心結果會得到不一樣的結果
unicode、sticky 好像都是 ES6 東西,先暫時不研究。
正则的扩展 - ECMAScript 6 入门
Edit fiddle - JSFiddle
[JS] RegExp 參數的正確姿勢 備份圖
正则表达式多行匹配及声明标识 - hongweigg 的专栏 - CSDN 博客
正则表达式之单行模式、多行模式、区分大小写模式 - ^小七 - 博客园