如何按单词及^标记的高亮部分拆分字符串为目标数组?
拆分含^标记的字符串得到目标数组
给定输入字符串:
const inputValue = 'jhon duo ^has a car^ right ^we know^ that';
需要将其拆分为如下数组:
['jhon','duo', 'has a car', 'right', 'we know', 'that']
单独用split('^')或split(' ')都无法实现需求,这里提供两种可行方案:
方案一:正则表达式匹配
直接用正则把两种目标内容(被^包裹的整段、单个单词)一次性捞出来,再处理掉标记即可。
代码实现:
const inputValue = 'jhon duo ^has a car^ right ^we know^ that'; // 匹配^包裹的内容,或者单个独立单词 const regex = /\^([^\^]+)\^|\b\w+\b/g; const result = inputValue.match(regex).map(item => { // 去掉内容前后的^标记 return item.startsWith('^') ? item.slice(1, -1) : item; }); console.log(result); // 输出目标数组
简单说明:
- 正则
/\^([^\^]+)\^|\b\w+\b/g里,前半段抓被^包裹的内容,后半段抓单个单词; match(regex)会提取所有符合规则的内容;- 最后遍历结果,把带
^的内容去掉首尾标记就ok。
方案二:分步处理拆分后的数组
先按^拆分字符串,再区分不同位置的内容分别处理:
代码实现:
const inputValue = 'jhon duo ^has a car^ right ^we know^ that'; const parts = inputValue.split('^'); const result = []; parts.forEach((part, index) => { if (index % 2 === 0) { // 偶数位置是普通文本,按空格拆分成单个单词,过滤掉空项后加入结果 result.push(...part.trim().split(/\s+/).filter(item => item)); } else { // 奇数位置是^包裹的内容,直接trim后加入结果 result.push(part.trim()); } }); console.log(result); // 输出目标数组
简单说明:
- 按
^拆分后,数组里偶数位(0、2、4...)是普通文本,奇数位(1、3...)是需要保留的整段内容; - 普通文本部分按空格拆分(用
/\s+/处理多个连续空格的情况),过滤空项后展开添加到结果; - 奇数位的内容直接去掉前后空格后添加即可。
内容的提问来源于stack exchange,提问作者Sara Ree
相关产品推荐
相关产品推荐

