在特定字符出现之间提取字符串

Extract strings between occurences of a specific character

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

例如:

初始字符串为:

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

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

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

快速说明:URL 无效。问号 ? 表示查询字符串的开头,key/value 对通常以 key=value 的形式提供,并以符号 &.

分隔

也就是说,如果这不是问题,那么为什么不 split 在问号上以获得值数组?

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

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

我相信这会做到:

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

使用正则表达式

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

var results = null;

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

一般情况下使用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)) {...}

可以从第一个问号开始取子串,然后按问号拆分

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

您可以split on ? and use 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);