在 NodeJS 应用程序中,我的数据中有一个电话号码字段,它在同一字符串中一个接一个地显示任意数量的电话号码:
\n\n\n (555) 555-5555(总机)\n\n、\n\n\n (777) 777-777(国内传真)\n\n
我只想提取“主要”电话号码并将其转换为 555-555-5555
格式,这就是主要号码。基本上我只是想提取“Main”之前的任何数字并使其更清晰(用“-”替换空格)
我已经找到了正确的正则表达式字符串
const phoneRegex =/^[\\n]*\(([0-9]{3})\)( )([0-9]{3}-[0-9]{4 })\(主\).*$/
但是当我尝试替换字符串时,它不起作用
foo.phone =foo.phone.replace(phoneRegex,'$1-$3')
我不断获得整个匹配部分——即所有\n 以及直到并包括“(Main)”的所有内容
我已经搜索过如何用捕获组替换整个字符串,但我还没有弄清楚。
最佳答案
您可以使用
var s = "\\n\\n \\n (555) 555-5555 (Main)\\n\\n, \\n\\n \\n (777) 777-777 (Domestic Fax)\\n\\n";
console.log(
s.replace(/^[^]*?\((\d{3})\)\s*(\d+)-(\d+)\s*\(Main\)[^]*/, '$1-$2-$3')
);
详细信息
^
- 字符串开头[^]*?
- 任意 0 个或更多字符,尽可能少\(
- 一个(
(\d{3})
- 第 1 组:三位数字\)
- 一个)
字符\s*
- 0+ 个空格(\d+)
- 第 2 组:一位或多位数字-
- 连字符(\d+)
- 第 3 组:一位或多位数字\s*
- 0+ 个空格\(Main\)
-(Main)
字符串[^]*
- 字符串的其余部分。
请参阅regex demo .
关于javascript - 如何在 JavaScript 中用正则表达式捕获组替换整个字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61931779/