【问题标题】:Extract strings between occurences of a specific character在特定字符的出现之间提取字符串
【发布时间】:2018-06-04 20:29:59
【问题描述】:

我正在尝试提取较大字符串中出现的特定字符之间的字符串。

例如:

初始字符串为:

var str = "http://www.google.com?hello?kitty?test";

我希望能够将问号之间的所有子字符串存储为它们自己的变量,例如"hello""kitty""test"

如何使用 JavaScript 或正则表达式定位特定字符的不同索引之间的子字符串?

【问题讨论】:

  • 您知道这不是一个有效的查询字符串吗?
  • 也许你会发现这很有用:stackoverflow.com/a/13419367/8173730
  • 如果“test”被提取,为什么不“http://www.google.com”
  • 它不打算用作有效的查询字符串,我只是在测试从 URL 中获取信息并使用它。

标签: javascript regex string find-occurrences


【解决方案1】:

您可以在 ? 上使用 split 并使用 slice 传递 1 作为参数值。

这将为您提供一个包含您的值的数组。如果您想创建单独的变量,例如可以通过其索引 var1 = parts[0] 获取值

var str = "http://www.google.com?hello?kitty?test";
var parts = str.split('?').slice(1);
console.log(parts);
var var1 = parts[0],
  var2 = parts[1],
  var3 = parts[2];
console.log(var1);
console.log(var2);
console.log(var3);

【讨论】:

  • 谢谢!这个解决方案对我来说效果最好,因为它是最直接且易于理解的代码 sn-p。我最终只是简单地调用了数组中的不同索引,而不是将它们存储在单独的变量中。我也喜欢它不将 URL 存储为第一个索引,如果字符串中没有任何 ?,它不会索引任何内容。
【解决方案2】:

快速提示:该 URL 无效。问号? 表示查询字符串的开头,键/值对通常以key=value 的形式提供,并用& 符号& 分隔。

话虽如此,如果这不是问题,那为什么不在问号上split 获取值数组呢?

var split_values = str.split('?');
//result: [ 'http://www.google.com', 'hello', 'kitty', 'test' ]

然后您可以简单地从数组中获取单个值,跳过第一个元素。

【讨论】:

  • 感谢您的解决方案!它工作得很好并且可以完成工作,我选择了另一个答案,因为它没有将 URL 存储为第一个索引。
【解决方案3】:

我相信这会做到:

var components = "http://www.google.com?hello?kitty?test".split("?");
components.slice(1-components.length) // Returns: [ "hello", "kitty", "test" ]

【讨论】:

  • 这个效果很好,但它也将 URL 存储为数组中的第一个索引。
【解决方案4】:

使用正则表达式

var reg = /\?([^\?]+)/g;
var s = "http://www.google.com?hello?kitty?test";

var results = null;

while( results = reg.exec(s) ){
  console.log(results[1]);
}

【讨论】:

  • 感谢正则表达式解决方案!这正是我所寻找的,但与仅 JS 的解决方案相比,这超出了我的理解范围。
【解决方案5】:

一般情况是使用RegExp:

var regex1 = new RegExp(/\?.*?(?=\?|$)/,'g'); regex1.lastIndex=0;
str.match(regex1)

请注意,这也会让您在每个子句中获得领先的 ?(在 Javascript 中没有后视正则表达式)。

或者,您可以使用粘性标志并在循环中运行它:

var regex1 = new RegExp(/.*?\?(.*?)(?=\?|$)/,'y'); regex1.lastIndex=0;
while(str.match(regex1)) {...}

【讨论】:

    【解决方案6】:

    你可以从第一个问号开始取子串,然后用问号分割

    const str = "http://www.google.com?hello?kitty?test";
    const matches = str.substring(str.indexOf('?') + 1).split(/\?/g);
    console.log(matches);

    【讨论】:

    • 谢谢。该解决方案效果很好,但是如果没有 ? 和附加术语添加到 URL 的末尾,它会将 URL 存储在数组中。
    猜你喜欢
    • 2016-03-20
    • 1970-01-01
    • 2012-04-30
    • 2023-03-13
    • 1970-01-01
    • 1970-01-01
    • 2020-08-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多