在对正则表达式的解析方面,为啥webkit有点奇怪呢。。。

mm_liu 2020-11-14 10:54:20


这样写的话,在chrome上解析是报错的。
但是在一些在线的正则测试网站上,是可以匹配成功的。。。如何改写,才能让图上的代码在chrome中匹配成功呢?
 
var kk='?s=55&t=88'
var reg = new RegExp("(^|\?|&)s=(.*)[&$]")
var s = kk.match(reg)
console.log(s)

...全文
974 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
mm_liu 2020-11-17
  • 打赏
  • 举报
回复
引用 2 楼 天际的海浪 的回复:
因为 new RegExp("(^|\?|&)s=(.*)[&$]") 是先定义一个字符串,再用这个字符串来创建正则表达式对象。 在定义字符串时,js源代码中定义的"(^|\?|&)s=(.*)[&$]"是字符串的字面量,在字符串字面量中 \ 也是转义符, 比如 \n 会转义成换行符。在生成的实际字符串中是没有 \ 这个字符的。 同样的 \? 会转义成 ? 。在生成的实际字符串中也是没有 \ 这个字符的。 要在生成的实际字符串中出现 \ 字符。需要在字符串字面量中写成 \\ 所以需要写成new RegExp("(^|\\?|&)s=(.*)[&$]") 要注意,字符串的字面量 与 实际字符串的区别。 在正则测试网站中可以,因为是直接获取文本框中实际字符串的值,不是js源代码中定义的字符串的字面量, \ 不会转义。 另外,也可以用 /(^|\?|&)s=(.*)[&$]/ 正则表达式的字面量,直接创建正则表达式对象,不经过字符串字面量,\ 也就不会被转义了。
恍然大悟啊。。。谢谢
similing 2020-11-15
  • 打赏
  • 举报
回复
"\?"表示的是字符串? "\\?"或者"\\\?"表示的才是字符串\? 原因是""表示的字符串中反斜杠会被转义
天际的海浪 2020-11-15
  • 打赏
  • 举报
回复
因为 new RegExp("(^|\?|&)s=(.*)[&$]") 是先定义一个字符串,再用这个字符串来创建正则表达式对象。 在定义字符串时,js源代码中定义的"(^|\?|&)s=(.*)[&$]"是字符串的字面量,在字符串字面量中 \ 也是转义符, 比如 \n 会转义成换行符。在生成的实际字符串中是没有 \ 这个字符的。 同样的 \? 会转义成 ? 。在生成的实际字符串中也是没有 \ 这个字符的。 要在生成的实际字符串中出现 \ 字符。需要在字符串字面量中写成 \\ 所以需要写成new RegExp("(^|\\?|&)s=(.*)[&$]") 要注意,字符串的字面量 与 实际字符串的区别。 在正则测试网站中可以,因为是直接获取文本框中实际字符串的值,不是js源代码中定义的字符串的字面量, \ 不会转义。 另外,也可以用 /(^|\?|&)s=(.*)[&$]/ 正则表达式的字面量,直接创建正则表达式对象,不经过字符串字面量,\ 也就不会被转义了。

87,996

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧