javascript - 使用构造函数创建的正则表达式不适用于 Safari

标签 javascript regex safari

据记载,可以使用两种方法创建正则表达式:

1.简单表达

   /ab+c/i;

2.使用构造函数

  new RegExp(/ab+c/, 'i');
  new RegExp('ab+c', 'i');

我使用了RegExp(/ab+c/, 'i')版本,它在Chrome、Mozilla中传递,但在Safari中不传递,返回错误:

cannot supply flags when constructing one regexp from another

我已经切换到第一种方法,它现在可以工作,但有两件事我不清楚:

  1. 在这样的表达式中“/”字符代表什么。我已经在在线正则表达式测试站点中看到它默认添加

  2. 为什么 safari 无法使用我使用的版本

最佳答案

正则表达式构造函数符号 (new RegExp(...)) 主要用于需要将变量传递给模式时。如果模式是“硬编码”的,请直接使用正则表达式文字:var reg =/ab+c/i。请参阅more on when to use which notation here .

Safari 目前不接受正则表达式文字作为 RegExp 构造函数的第一个参数,其他一些浏览器也不接受。因此,传递常规字符串模式作为第一个参数会更安全。

对于/.../,这些是正则表达式分隔符,用于分隔操作/模式/修饰符。在JS中,不使用action部分,修饰符仅限于i(不区分大小写)、g(全局匹配)和m (多行模式重新定义 ^$ 行为,以便它们可以匹配行的开始/结束而不是开始/结束字符串)。

关于javascript - 使用构造函数创建的正则表达式不适用于 Safari,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37919802/

相关文章:

ios - 移动 Safari 上的 CSS 背景问题

javascript - 如何配置图表 x 轴标签?

javascript - Modal 内的表格每一行都填充,而不是单独填充

java - 使用 Java Pattern Regex 从 WebViewClient 中解码的 mailto 中提取信息

html - 如何防止双击 Safari 中的空白区域/空间选择?

javascript - Cocoa WebView 中的 HTML5 canvas 绘图比 Safari 慢

javascript - 使用鼠标滚轮和侧边栏更改 Div Y 位置

javascript - Webpack-Dev-Server + Laravel,从网络设备访问不会通过内存中的js注入(inject)css

Python:为什么使用 re.IGNORECASE 编译的正则表达式会删除第一个字符?

javascript - Google Sheet 脚本中的正则表达式