- 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()。