- JS引擎 v.s. 正則表達式引擎
它們的轉義符都是\
經過JS引擎會進行一次轉義
經過正則表達式會進行一次轉義 - 在一次轉義中
\\\\\
的轉義過程:
第一個 \ (轉義符) 會“吃掉”第二個 \,結果是得到一個字面量的 \。
第三個 \ (轉義符) 會“吃掉”第四個 \,結果是得到另一個字面量的 \。
第五個剩下
最終結果: 字符串中會包含3個字面量的反斜杠。 \d{4}*
這種表達是錯誤的,因為*
表示d{4}
重復0~N次,前面必須放一個表示新字符的表達式。如.
- 練習
這個dataPattern能匹配什么內容?
const str=`
<script>
(function(){
const Patternstr ="\/\\\\\d{4}\/\\\\\d{2}\/\\\\\d{2}\/\.*";
const dataPattern = new RegExp(Patternstr);
})()
</script>`
// 把目錄div插入到</body>標簽前面
html = html.replace(/<\/body>/, str + '</body>');
解析:
- 模板字串 (backtick ``)中
\
也是轉義符,Patternstr變為/\\\d{4}/\\\d{2}/\\\d{2}/.*";
- 經過 JavaScript 字串解析器處理,Patternstr變為
/\\d{4}/\\d{2}/\\d{2}/.*
- 經過正則表達式引擎解析,Patternstr變為
/\d{4}/\d{2}/\d{2}/.*
- 根據正則表達式,可知形如
/2025/05/28/.....
這類字符串可以被成功匹配
- 補充
在 JavaScript 中,.test() 和 .match() 都是 RegExp (正則表達式) 對象或字符串對象的方法,用于執行正則表達式匹配操作。它們的主要區別在于返回值的類型和目的。
當你只需要判斷字符串中是否存在某個模式時,使用 .test()。 它的性能通常比 .match() 更好,因為它一旦找到匹配就會立即返回 true,不需要構建并返回完整的匹配數組。
當你需要獲取匹配到的具體內容、匹配位置或所有匹配項時,使用 .match()。