Regex——为什么在使用新的RegExp方法时这个模式不能工作?
Regex - Why doesn't this pattern work when using the new RegExp method?
我正在搜索这个字符串的'invite=XXXX'部分。我使用捕获组来提取'='和';'之间的值。当我使用第一个regex方法它工作,但当我使用第二个它不。为什么会这样?
var string = "path=/; expires=Thu, 01 Jan 1970 00:00:00 GMT; invite=1323969929057; path=/; expires=Sat, 14 Jan 2012 17:25:29 GMT;";
// first method
var regex1 = /invite=('w+)/;
var regexMatch1 = string.match(regex1);
// second method
var regex2 = new RegExp("/invite=('w+)/");
var regexMatch2 = string.match(regex2);
// log results
console.log(regexMatch1);
console.log(regexMatch2);
这里的工作示例>>
你必须转义'
,并且像Jake说的那样,去掉斜杠。
var regex2 = new RegExp("invite=(''w+)");
^ Notice 2 "'"
http://jsfiddle.net/ZqkQ9/10/使用RegExp()构造函数时,不需要斜杠。改成:
var regex2 = new RegExp("invite=(''w+)");
因为/
是用于正则表达式文字的。由于您正在使用RegExp
对象,因此需要删除斜杠。您还需要转义反斜杠,因为您没有使用文字:
var regex2 = new RegExp("invite=(''w+)");
var regexMatch2 = string.match(regex2);
应该是:
var regex2 = new RegExp("invite=(''w+)");
字符串形式的正则表达式没有/
前缀和后缀,所有转义字符必须是''
而不是'
。
使用RegExp
创建RegExp对象时不需要斜杠。
如果你愿意,你甚至可以使用RegExp.source
比较模式试试console.log(regex1.source === regex2.source)
参考:https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/RegExp
从RegExp构造函数中删除/'s,转义'w并放入第二个参数:
var regex2 = new RegExp("invite=(''w+)", "");
相关文章:
- 为什么我的JavaScript在Safari上的严格模式下不能正常工作
- node.js可以识别字符模式,但不能识别数字模式
- 选中的单选按钮在jQuery模式对话框中不能正常工作
- js不能在bs3ajax模式中工作
- Eonasdan日期时间选择器没有'不能在联机模式下工作
- Ajax 构建关系按钮有效,用于显示引导模式的第二个按钮有效,但两者不能协同工作
- “函数声明不能嵌套在语句中” - IE 处于严格模式错误
- 不能将页面对象模式与量角器一起使用
- Rails 4 App-JS在开发模式下可以与Webrick合作,但不能与Passenger/Apache2合作
- regex可以在regex测试程序中工作,但不能在模式中工作
- JavaScript 在调试模式下工作,但不能正常工作
- jquery多选过滤器不能在对话框中选择,其模式为true
- 网格不能在此('怪癖')模式下使用错误
- Regex——为什么在使用新的RegExp方法时这个模式不能工作?
- 为什么我的JavaScript构造函数模式不能工作?
- Bootstrap模式不能与示例代码一起工作
- 引导模式不能从AngularJs中加载
- 引导模式不能正确加载动态内容
- 为什么我的模式不能在mongoose数组中添加默认值?
- Regex模式不能用于输入模式匹配