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

时间:2018-06-04 20:30:00

标签: javascript regex string find-occurrences

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

例如:

初始字符串是:

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

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

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

6 个答案:

答案 0 :(得分:0)

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

话虽如此,如果这不是问题那么为什么不在问号上var split_values = str.split('?'); //result: [ 'http://www.google.com', 'hello', 'kitty', 'test' ] 来获取一系列值?

{{1}}

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

答案 1 :(得分:0)

我相信这样做会:

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

答案 2 :(得分:0)

使用正则表达式

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

var results = null;

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

答案 3 :(得分:0)

一般情况是使用RegExp:

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

请注意,这也会让你在每个子句中获得前导?(在Javascript中没有后视regexp)。

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

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

答案 4 :(得分:0)

您可以从第一个问号开始,然后用问号

分割子字符串

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

答案 5 :(得分:0)

您可以在?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);