给出字符串
var string = "${foo}bar${bar}foo";
如何分割得到
var result = ["${foo}", "bar", "${bar}", "foo"];
给出字符串
var string = "${foo}bar${bar}foo";
如何分割得到
var result = ["${foo}", "bar", "${bar}", "foo"];
// 用match即可。没有必要split来分割,再对数组进行filter等操作
var str = '${foo}bar${bar}foo';
var str2 = 'foo${foo}${bar}bar${bar}${bar}foo';
var reg = /(\$\{[^\}]*\})|(\w+)/g;
var result = str.match(reg);
var result2 = str2.match(reg);
console.log(result);
// ["${foo}", "bar", "${bar}", "foo"]
console.log(result2);
// ["foo", "${foo}", "${bar}", "bar", "${bar}", "${bar}", "foo"]
如果字符串确实如此规律的话
不用正则,用$和}切割即可
string.split('$') // 以$切割
.map(str => str.split('}')) // 以}切割
.reduce((a, b) => a.concat(b),[]) // 合并数组
.filter(s => s !== '') // 过滤空字符串
.map(s => s.startsWith('{') ? '$'+s+'}' : s) // 把切割掉的符号补回来
"${foo}bar${bar}foo".replace(/(\${\w+(?:}))/g, '|$1|').split('|').filter(s => s !== '')
输出 ["${foo}", "bar", "${bar}", "foo"]
"${sxx${foo}bar${bar}foo}".replace(/(\${\w+(?:}))/g, '|$1|').split('|').filter(s => s !== '')
输出 ["${sxx", "${foo}", "bar", "${bar}", "foo}"]
8 回答4.1k 阅读✓ 已解决
6 回答2.5k 阅读✓ 已解决
5 回答2.3k 阅读✓ 已解决
5 回答5.8k 阅读✓ 已解决
4 回答2k 阅读✓ 已解决
3 回答2.1k 阅读
4 回答2.6k 阅读✓ 已解决