在特定字符出现之间提取字符串
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);
我正在尝试提取较大字符串中出现的特定字符之间的字符串。
例如:
初始字符串为:
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);