如何从JavaScript正则替换语句中获取拆分字符串的分隔符?
嘿,咱们一步步来解决这个问题!你想要从那个正则替换里同时拿到拆分后的字符串片段和对应的分隔符,对吧?下面是具体的实现方法:
1. 从正则表达式中提取分隔符集合
你的正则/([&=])/g里,捕获组()包裹的[&=]就是用来匹配分隔符的规则。我们可以通过正则的source属性获取它的文本内容,再提取出捕获组里的分隔符模式,最后拆分出独立的分隔符:
const regex = /([&=])/g; // 提取正则捕获组内的模式文本 const delimiterPattern = regex.source.match(/\((.*?)\)/)[1]; // 匹配出每个独立的分隔符(这里要注意&是一个整体,不能拆成单个字符) const delimiters = delimiterPattern.match(/&|=/g); console.log(delimiters); // 输出: ['=', '&']
2. 拆分原字符串并获取片段内容
直接用split()会丢失分隔符,所以我们可以用matchAll()来匹配所有「内容段+分隔符」或者「最后一段内容」的组合,再分别收集内容和分隔符:
var str = "hello=world&universe"; const regex = /([&=])/g; // 匹配所有内容段和对应的分隔符(或结尾) const matches = [...str.matchAll(/(.*?)([&=]|$)/g)]; var strings = []; var delimiters = []; matches.forEach(match => { const content = match[1]; const delimiter = match[2]; // 收集非空的内容段 if (content) strings.push(content); // 收集存在的分隔符 if (delimiter) delimiters.push(delimiter); }); console.log(strings); // 输出: ['hello', 'world', 'universe'] console.log(delimiters); // 输出: ['=', '&']
整合后的完整代码
如果要一次性完成提取分隔符和拆分字符串的操作,可以把两个步骤结合起来:
var str = "hello=world&universe"; const regex = /([&=])/g; // 提取分隔符集合 const delimiterPattern = regex.source.match(/\((.*?)\)/)[1]; const delimiters = delimiterPattern.match(/&|=/g); // 拆分字符串得到内容片段 const splitRegex = new RegExp(`(.*?)(${delimiterPattern}|$)`, 'g'); const strings = [...str.matchAll(splitRegex)] .map(match => match[1]) .filter(Boolean); // 过滤掉空字符串 console.log('strings:', strings); // ['hello', 'world', 'universe'] console.log('delimiters:', delimiters); // ['=', '&']
⚠️ 注意:如果你的原字符串里的&其实是&的HTML转义(实际应该是&),那只需要把正则里的&改成&,对应的分隔符就会变成['=', '&'],代码逻辑是通用的。
内容的提问来源于stack exchange,提问作者Gregory R.
相关产品推荐
相关产品推荐

