我知道StackOverflow已经完全涵盖了这个主题,但我不能为我的生活让我的正则表达式工作.所以没有进一步的重复...
这就是我所拥有的.
串: <p model='cat'></p>
正则表达式: .match(/(?:model=')(.*)(?:')/g)
这就是我的表达式返回的内容: model='cat'
这就是我要的: cat
为什么我的非捕获组不被忽略?难道我不明白非捕获组的作用是什么?为什么我的正则表达式不起作用?
Dal*_*las 34
整个匹配将始终为组0,您需要访问该特定组(在这种情况下组1,因为第一组是非捕获),您可以这样做:
var str = "<p model='cat'></p>";
var regex = /(?:model=')(.*)(?:')/g
var match = regex.exec(str);
alert(match[1]); // cat
Run Code Online (Sandbox Code Playgroud)
另外,我想你可能想要str中的几个匹配,你可以这样做:
var str = "<p model='cat'></p><p model='dog'></p><p model='horse'></p>";
var regex = /(?:model=')([^']*)/g
var matches = [];
var match;
while (match = regex.exec(str)) {
matches.push(match[1]);
}
alert(matches); // cat,dog,horse
Run Code Online (Sandbox Code Playgroud)
一个非捕获组基本上只是一个非组?一种使用括号而不实际将模式的那部分视为一个组的方法。
看起来您实际上正在寻找的是“匹配前缀但排除”组(?<=)和“匹配后缀但排除”组(?=)。
注意: Internet Explorer 似乎不支持这种类型的组。
如果你使用这些,你会得到想要的结果:
var str = "<p model='cat'></p><p model='dog'></p><p model='horse'></p>";
var regex = /(?<=model=')[^']*(?=')/g
var matches = str.match(regex);
console.log(matches);Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
17815 次 |
| 最近记录: |