![](/img/trans.png)
[英]JavaScript: Extract part of string between two optional characters with Regex
[英]Javascript - Extract part of a string lying between two special characters
我有这样的字符串-
countries=a,b&states=c,d&districts=e,f,g,h
countries=a,b
我想提取位于字符=
和&
之间的字符串部分,并将结果作为数组返回。 所以,在第一种情况下,结果应该是['a','b', 'c','d','e','f','g','h']
。 在第二种情况下,它应该是['a','b']
。 我通过这样做达到了结果-
const extract = string.split('&');
const splitArray = extract.map(x => x.split('=')[1]);
const resultString = splitArray.join(',');
const result = resultString.split(',');
我可以更简洁、更好地做到这一点吗?
一个使用URLSearchParams的例子
let query = 'countries=a,b&states=c,d&districts=e,f,g,h';
let values = [];
(new URLSearchParams(query)).forEach(function(v) {
v.split(',').forEach(function(v){
values.push(v);
});
});
console.log(values); // ["a", "b", "c", "d", "e", "f", "g", "h"]
...但是如果“简洁”是指“单线”..这是我的看法:
let query = 'countries=a,b&states=c,d&districts=e,f,g,h';
query = query.replace(/(^|&).*?=/g,',').split(',').filter(Boolean);
console.log(query); // ["a", "b", "c", "d", "e", "f", "g", "h"]
const input = [ 'countries=a,b&states=c,d&districts=e,f,g,h', 'countries=a,b' ]; input.forEach((line) => { let result = [].concat.apply([], line.split(/&/).map((keyValue) => { return keyValue.replace(/^[^=]*=/, '').split(/,/) })); console.log(line + ' ==> ' + JSON.stringify(result)); });
Output:
countries=a,b&states=c,d&districts=e,f,g,h ==> ["a","b","c","d","e","f","g","h"]
countries=a,b ==> ["a","b"]
解释:
&
拆分以获取键/值对'
[].concat.apply([], arr)
展平生成的 arrays 数组或者,您可以初始化一个空数组[]
,并作为每个键/值的最后一步,对每个项目执行 forEach ,并将其推送到数组中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.