求正则表达式:保留字符串前两个有效连字符并格式化数字
解决方案
可以通过分步处理来实现需求,以下是具体的JavaScript代码实现:
function processString(str) { // 1. 移除开头的非数字字符(比如示例中的d) let temp = str.replace(/^[^0-9]+/, ''); // 2. 将连续的多个连字符合并为单个连字符 temp = temp.replace(/-+/g, '-'); // 3. 拆分字符串并重组,保留前两个连字符,后续连字符替换为直接拼接数字 const parts = temp.split('-'); if (parts.length <= 2) { return temp; } return `${parts[0]}-${parts[1]}-${parts.slice(2).join('')}`; } // 测试示例 console.log(processString('d333-4444-555--5---5-')); // 输出:333-4444-55555 console.log(processString('d333--4444-555--5---5-')); // 输出:333-4444-55555
步骤说明
- 第一步:用
/^[^0-9]+/匹配字符串开头所有非数字字符并移除,确保从有效数字开始。 - 第二步:用
/-+/g匹配所有连续的连字符,替换为单个连字符,统一连字符格式。 - 第三步:将处理后的字符串按连字符拆分为数组,若数组长度大于2,就把前两个部分用连字符连接,后面所有部分直接拼接成一串数字;若长度不足2,直接返回处理后的字符串即可。
你之前写的replace(/[^0-9]/g, '')会把所有非数字字符(包括连字符)全部移除,所以才会和预期结果差距很大,上面的分步处理可以精准控制连字符的保留数量。
内容的提问来源于stack exchange,提问作者Ivanov Viktor
相关产品推荐
相关产品推荐

