const regex = /[\[\]]/gi;
const a = str.replaceAll(regex, ' ').trim().split(" ")
const arr = []
const arr2 = []
let newArr
for(let i = 0; i < a.length; i++) {
if (a[i].length === 0) {
arr2.push(0)
}
if (a[i].length !== 0) {
arr.push(a[i].length)
}
}
newArr = arr.concat(arr2)
if (newArr.includes(0)) {
newArr.pop()
}
return newArr.join(", ")
我必须得到: [汤姆] [] - > 3,0 但是我得到3个没有零
(\[[a-zA-Z]*\])*
.
。I将删除第一个
[
和最后一个
]
。然后,我将字符串按][
。
const str = '[Tom][]';
const substrs = str.substring(1, str.length - 1).split('][');
const lengths = substrs.map(str => str.length);
console.log(lengths.join(', '));
使用ES6您可以以更简单的方式进行操作
const str = '[Tom][]';
const count = str.match(/\[(.*?)\]/g)
.map(x => x.slice(1, -1))
.map(x => x.length)
.join(', ');
console.log(count);
您可以通过数组操作来实现这一目标:
function f(str) {
return str.split("[").filter(item => item.length).map(item => item.substring(0, item.length - 1).length).join(", ");
}
console.log(f("[tom][]"));
str.split("[")
将
str
[
在上一个步骤中所拥有的数组中,将忽略我们空字符串的所有令牌
.filter(item => item.length)
.map(item -> item.substring(0, item.length - 1))
和
tom]
]
,分别具有3和0实际令牌
]
将3和0的值分别转换为单个字符串,将项目与length
分开,因此它将导致.join(", ")
,
带有此正则的给定字符串:
3, 0
.split()
/\[(.*?\])/
用作占位符next,
["", "Tom]", "", "]", ""]
数组通过分配一个空数组作为累加器的初始值
"]"
:
.reduce()
,然后跳过0的索引,甚至所有编号索引:
cnt
在任何奇数索引中,删除第一个字符,然后将字符串的.reduce((cnt, seg) => { ... }, []);
if (idx % 2 === 0) return cnt;
.length
cnt
最终,cnt.push(seg.slice(1).length);
return cnt;
数字数组成字符串。
[3, 0]
使用
.join(", ")
const charCounts = (str) => {
return str
.split(/\[(.*?\])/)
.reduce((cnt, seg) => {
if (idx % 2 === 0) return cnt;
cnt.push(seg.slice(1).length);
return cnt;
}, []).join(", ");
};
console.log(charCounts("[Tom][]"));
之间的所有捕获组,并且不包含String.matchAll()
[]
]