将正则表达式替换为组以及javascript

时间:2018-11-05 20:59:52

标签: javascript regex

  

工作原理:我使用的正则表达式类似于下面的可获取扩展名的电话号码(the actual regex is here)   作为可选的第四组。正则表达式本身对于   前三组如下图所示

"555-555-5555 x214".replace(/([\d]{3})-([\d]{3})-([\d]{4})(?: +x([\d]+))?/, "$1-$2-$3");
// returns 555-555-5555
  

我要寻找的内容:仅在第4组为“分组”时,我找不到替换字符串的语法来插入电话扩展名并以 x 开头   被抓获。在我的正则表达式中,电话分机可以用   我想简单替换的几个不同的字符名称   加上“ x”。

如果我使用:

"555-555-5555 x214".replace(/([\d]{3})-([\d]{3})-([\d]{4})(?: +x([\d]+))?/, "$1-$2-$3 x4");
// returns 555-555-5555 x214

"555-555-5555".replace(/([\d]{3})-([\d]{3})-([\d]{4})(?: +x([\d]+))?/, "$1-$2-$3 x4");
// will return 555-555-5555 x

在上一个示例中,我得到了“ x”(我对此并不感到惊讶),因此我正在寻找仅在捕获到某些东西后才添加“ x”加第4组的语法。

使用String.replace可以吗?如果没有,一旦我确定了它们的组成部分,是否有更有效的方法将这些组替换为带格式的数字类型?

1 个答案:

答案 0 :(得分:2)

String#replace函数还可以将函数用作第二个参数,它比字符串更能表达内容。

例如:

"555-555-5555".replace(/(\d{3})-(\d{3})-(\d{4})(?: +x(\d+))?/, replacer);

function replacer(match, p1, p2, p3, p4, offset, string) {
  return `${p1}-${p2}-${p3}` + (p4 ? ` x${p4}` : '')
}

有关更多详细信息,请参见MDN documentation:)

请注意,您的正则表达式需要进行一些修改。在这里玩:https://regex101.com/r/rtJYTw/1