如何用拆分时的相同分隔符重新拼接被拆分的字符串?
问题解答
你现在用的str.split(/[\.?!;]+\s?/g)会直接丢弃分隔符,拆分后的数组里只有纯句子内容,所以没法直接通过join用原分隔符拼回去——因为你根本没保存这些分隔符。
要实现“用拆分时的相同分隔符重新拼接”,得先把分隔符和句子内容一起保留下来,有两种常用方法:
方法1:给split的正则加捕获组
正则里用括号把分隔符部分包起来,split就会把句子内容和分隔符交替存入数组(偶数位是句子,奇数位是分隔符)。之后你可以处理句子部分,再直接拼接整个数组。
示例代码:
const str = "Edit the Expression & Text to see matches. Roll over matches or the expression for details? PCRE & JavaScript flavors of RegEx are supported! "; // 带捕获组的split,同时保留句子和分隔符 const splitParts = str.split(/([\.?!;]+\s?)/g); // 处理每个句子(比如给句子加个标记),分隔符直接保留 const result = splitParts.map((item, idx) => { if (idx % 2 === 0) { // 这里写你的句子处理逻辑,空字符串直接跳过(原字符串末尾的分隔符会导致最后一个元素为空) return item ? `[已处理] ${item}` : ''; } return item; }).join(''); console.log(result); // 输出:[已处理] Edit the Expression & Text to see matches. [已处理] Roll over matches or the expression for details? [已处理] PCRE & JavaScript flavors of RegEx are supported!
方法2:用match直接匹配“句子+分隔符”的组合
直接用正则匹配每个完整的“句子内容+分隔符”单元,之后拆分每个单元里的内容和分隔符,处理内容后再拼接回去。
示例代码:
const str = "Edit the Expression & Text to see matches. Roll over matches or the expression for details? PCRE & JavaScript flavors of RegEx are supported! "; // 匹配所有带分隔符的句子单元 const sentenceUnits = str.match(/[^.?!;]+[\.?!;]+\s?/g) || []; // 处理每个单元 const result = sentenceUnits.map(unit => { // 拆分内容和分隔符 const [content, separator] = unit.match(/([^.?!;]+)([\.?!;]+\s?)/).slice(1); // 处理内容后重新拼接 return `[已处理] ${content}${separator}`; }).join(''); console.log(result); // 输出和方法1一致
两种方法都能实现你的需求,选哪种看你具体的处理逻辑更适合哪种形式。
内容的提问来源于stack exchange,提问作者Ruslan Vyvdyuk
相关产品推荐
相关产品推荐

