javascript:获取特定字符串之间的字符串

时间:2013-12-16 10:42:35

标签: javascript regex match

我有一个像detail?ww=hello"....detail?ww=that"这样的长字符串。我想要在detail?ww=和下一个"之间获取所有字符串,我使用.match(/detail\?ww=.+\"/g)但是我得到的数组包含detail?ww=",我怎样才能获得没有detail?ww="

的字符串

2 个答案:

答案 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及以下版本不支持maphttp://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"]