我正在尝试在较大字符串中的特定字符的出现之间提取字符串。
例如:
初始字符串是:
var str = "http://www.google.com?hello?kitty?test";
我希望能够将问号之间的所有子字符串存储为自己的变量,例如"hello"
,"kitty"
和"test"
。
如何使用JavaScript或正则表达式来定位特定字符的不同索引之间的子字符串?
答案 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)
那会给你一个包含你的值的数组。如果要创建单独的变量,可以通过索引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);