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

javascript:get strings between specific strings

本文关键字:字符串 之间 获取 javascript      更新时间:2023-09-26

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

如果JavaScript理解lookbacking,您可以使用它来匹配前面是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); 

正则表达式的一些更改:

+?——非贪婪量词。

您可以使用一个基本循环:

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


请记住,map不受IE8及以下版本的支持: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"]