【问题标题】:javascript:get strings between specific stringsjavascript:获取特定字符串之间的字符串
【发布时间】:2013-12-16 10:42:34
【问题描述】:

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

【问题讨论】:

标签: javascript regex match


【解决方案1】:

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

您的正则表达式的一些更改:

+? - 非贪婪量词。

【讨论】:

  • 哦,谢谢,我明白了。我不知道javascript数组的方法map,现在我明白了。非常感谢。
  • 你并不真的需要 map 方法。您可以简单地遍历匹配数组并构建您感兴趣的新数组。我发现它比直接迭代更清晰、更容易理解。
  • 在我尝试迭代数组之前,但我认为它很乏味,我只是想要一个更清洁的方法
【解决方案2】:

您可以使用基本循环来做到这一点:

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"]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-24
    • 1970-01-01
    • 1970-01-01
    • 2020-01-09
    • 1970-01-01
    • 1970-01-01
    • 2013-03-16
    • 1970-01-01
    相关资源
    最近更新 更多