如何获知正则表达式匹配并移除的字符?附JS代码示例
如何收集字符串处理中被移除的字符
原代码分两步清理了字符串:先是删掉指定标点,再把连续多空格缩成单个空格。要搞清楚哪些字符被删、并把它们存起来,可以按下面的方式改代码:
1. 先抓被删掉的标点
原代码用正则匹配标点直接替换为空,我们可以先把所有匹配到的标点捞出来存好:
var s = "This., -/ is #! an $ % ^ & * example ;: {} of a = -_ string with `~)() punctuation"; // 收集所有被移除的标点,没匹配到就返回空数组 var removedPunctuation = s.match(/[.,\/#!$%\^&\*;:{}=\-_`~()]/g) || []; // 原逻辑保留,删掉标点 var punctuationless = s.replace(/[.,\/#!$%\^&\*;:{}=\-_`~()]/g,"");
2. 再抓被缩减的多余空格
第二步处理连续空格时,用replace的回调函数,每次匹配到连续空格就把它记录下来:
var removedSpaces = []; // 处理空格时,把匹配到的连续空格存进数组,再替换成单个空格 var finalString = punctuationless.replace(/\s{2,}/g, function(match) { removedSpaces.push(match); return ' '; });
3. 合并所有被移除的内容
如果要把两类被删内容放一块,直接合并两个数组就行:
var allRemoved = removedPunctuation.concat(removedSpaces);
拿示例字符串测试的话,removedPunctuation会包含所有被删掉的标点符号,removedSpaces里会存原字符串中-/后面的那两个连续空格,allRemoved就是所有被移除内容的集合。
内容的提问来源于stack exchange,提问作者Roger A. Leite
相关产品推荐
相关产品推荐

