正则匹配class或series时将前导空格替换为横杠,避免重复新增横杠
问题原因
你当前使用的正则前瞻规则是「后面非空白字符中只要包含class或series就命中」,所以哪怕后面的单词已经带横杠(如E-Class),只要包含class片段就会触发空格替换,才会出现多余横杠的问题。
修正后正则
根据实际需求二选一即可:
方案1:仅匹配空格后整个单词为class/series的场景(适配你给出的测试用例)
/\s(?=(?:class|series)\b)/gi
方案2:允许空格后单词以class/series结尾,同时排除已带横杠的场景
/(?<!-)\s(?=[^\s]*(?:class|series)\b)/gi
新增(?<!-)负向后顾规则,要求待替换的空格前面不能是横杠,从根源避免重复加横杠的问题。
测试验证效果
| 输入字符串 | 替换后结果 | 是否符合预期 |
|---|---|---|
' E-Class' | ' E-Class' | 是 |
'E Class' | 'E-Class' | 是 |
' E Class' | ' E-Class' | 是 |
JS环境替换示例
const rawStr = ' E-Class E Class E Series'; const processedStr = rawStr.replace(/\s(?=(?:class|series)\b)/gi, '-'); // 输出结果: E-Class E-Class E-Series
内容的提问来源于stack exchange,提问作者Martyn Ball
相关产品推荐
相关产品推荐

