LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 201|回复: 0

new RegExp

[复制链接]
发表于 2024-1-26 23:28:50 | 显示全部楼层 |阅读模式
如果我们使用 new RegExp 创建正则表达式,那么我们不必转义 /,但需要进行一些其他转义。

例如,考虑下面这个示例:

let reg = new RegExp("\d\.\d");

alert( "Chapter 5.1".match(reg) ); // null
在之前的示例中我们使用 /\d\.\d/ 进行类似的搜索没问题,但 new RegExp("\d\.\d") 不起作用,为什么?

因为反斜杠被字符串“消耗”了。我们可能还记得,常规字符串有自己的特殊字符,例如 \n,反斜杠用于转义。

下面是 “\d.\d” 的感知形式:

alert("\d\.\d"); // d.d
在字符串中的反斜杠表示转义或者类似 \n 这种只能在字符串中使用的特殊字符。这个引用会“消耗”并且解释这些字符,比如说:

\n —— 变成一个换行字符,
\u1234 —— 变成该编码所对应的 Unicode 字符,
……而当没有特殊含义时:如 \d 或者 \z,碰到这种情况时则会自动移除反斜杠。
所以调用 new RegExp 会获得一个没有反斜杠的字符串。这就是搜索不起作用的原因!

如果要修复这个问题,我们需要双斜杠,因为引用会把 \\ 变为 \:

let regStr = "\\d\\.\\d";
alert(regStr); // \d\.\d(现在对了)

let regexp = new RegExp(regStr);

alert( "Chapter 5.1".match(regexp) ); // 5.1

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表