据记载,可以使用两种方法创建正则表达式:
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
我已经切换到第一种方法,它现在可以工作,但有两件事我不清楚:
在这样的表达式中“/”字符代表什么。我已经在在线正则表达式测试站点中看到它默认添加
为什么 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/