我有一个像detail?ww=hello"....detail?ww=that"
这样的长字符串。我想要在detail?ww=
和下一个"
之间获取所有字符串,我使用.match(/detail\?ww=.+\"/g)
但是我得到的数组包含detail?ww=
和"
,我怎样才能获得没有detail?ww=
和"
答案 0 :(得分:1)
如果JavaScript理解了lookbehind,您可以使用它来匹配前面带有detail?ww=
并后跟;
的字符串。不幸的是,情况并非如此,因此需要进行更多处理:
var str = 'detail?ww=hello"....detail?ww=that"';
var regexG = /detail\?ww\=(.+?)\"/g;
var regex = /detail\?ww\=(.+?)\"/;
var matches = str.match(regexG).map(function(item){ return item.match(regex)[1] });
console.log(matches);
正则表达式的一些更改:
+?
- 非贪婪的量词。
答案 1 :(得分:0)
您可以使用基本循环执行此操作:
var result = [],
s = 'detail?ww=hello"....detail?ww=that"',
r = /detail\?ww=([^"]+)/g,
m;
while (m = r.exec(s)) {
result.push(m[1]);
}
result; // ["hello", "that"]
[^"]+ : any char except double quotes, one or more times
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/exec
请注意,IE8及以下版本不支持map
:http://kangax.github.io/es5-compat-table/#Array.prototype.map。如果您真的不喜欢循环但需要跨浏览器兼容的解决方案,可以选择以下方法:
var s = 'detail?ww=hello"....detail?ww=that"';
s = s.replace(/.*?detail\?ww=([^"]+")/g, '$1').match(/[^"]+/g) || [];
s; // ["hello", "that"]