据记载,可以使用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
我已经切换到第一种方法,它现在有效,但有两件事情对我来说不明确:
' /'字符代表这样的表达。我已经看到它默认添加到在线正则表达式测试网站
为什么safari无法使用我使用的版本
答案 0 :(得分:1)
当您需要将变量传递给模式时,主要使用正则表达式构造函数表示法(new RegExp(...)
)。如果模式是"硬编码",请立即使用正则表达式文字 :var reg = /ab+c/i
。请参阅more on when to use which notation here。
Safari目前不接受正则表达式文字作为RegExp
构造函数的第一个参数,也不接受其他浏览器。因此,将常规字符串模式作为第一个参数传递会更安全。
对于/.../
,这些是正则表达式分隔符,用于分隔操作 / 模式 / 修饰符。在JS中,不使用 action 部分,修饰符仅限于i
(不区分大小写),g
(全局匹配)和m
(多行模式重新定义^
和$
行为,以便它们可以匹配行的开头/结尾而不是字符串的开头/结尾。)