javascript - 如何在 JavaScript 中用正则表达式捕获组替换整个字符串?

标签 javascript node.js regex

在 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/

相关文章:

javascript - 使用 express 发送后出现错误无法设置 header ?

javascript - 删除逗号分隔的字符串并将其替换为 javascript 正则表达式

PHP preg_split,按相同字符分割

javascript - 在 d3 中构建堆叠条形图时动态获取不同的颜色

javascript - 从另一个事件 Node js 发出事件

javascript - 刷新 html js 页面

javascript - 使用javascript从变量中的iframe获取src宽度和高度

javascript - 尝试在现代脚本编辑器上运行 JS 代码时出现“SP 未定义”

javascript - Angular js : an arrray from one file to another

arrays - Mongoose 用数组元素的条件填充嵌套数组