使用不与Safari

时间:2016-06-20 10:10:22

标签: javascript regex safari

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

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无法使用我使用的版本

1 个答案:

答案 0 :(得分:1)

当您需要将变量传递给模式时,主要使用正则表达式构造函数表示法(new RegExp(...))。如果模式是"硬编码",请立即使用正则表达式文字 var reg = /ab+c/i。请参阅more on when to use which notation here

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

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