工作原理:我使用的正则表达式类似于下面的可获取扩展名的电话号码(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可以吗?如果没有,一旦我确定了它们的组成部分,是否有更有效的方法将这些组替换为带格式的数字类型?
答案 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