传递手动创建的RegExp对象时,String.match返回不正确

String.match return incorrect when passed a manually created RegExp object?

本文关键字:String match 不正确 返回 对象 RegExp 创建      更新时间:2023-09-26

假设我有这个regexp

(^|;)['s]*style=([^;]*)

与匹配的字符串

test=en; style=night

根据String.match 的MDN文档

  • 我可以传入一个正则表达式文字-/(^|;)['s]*style=([^;]*)/
  • 我可以传递一个字符串,它被包装在RegExp对象"(^|;)['s]*style=([^;]*)"
  • 或者我可以传入创建的RegExp对象-new RegExp("(^|;)['s]*style=([^;]*)")

问题是,它们的评估值并不都相同。

/(^|;)['s]*style=([^;]*)/ => array of matches
"(^|;)['s]*style=([^;]*)" => null
new RegExp("(^|;)['s]*style=([^;]*)") => null

这种情况下发生了什么?为什么他们不都对同一组比赛进行评估

顺便说一句。在Chrome 38.0.2125.101和IE 11.0.9600.17278 上测试

当使用构造函数时,正常的字符串转义规则(当包含在字符串中时,前面带有''的特殊字符)是必需的例如,以下是等效的:

var re = /'w+/;
var re = new RegExp("''w+");

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp