我需要格式化在源字符串中找到的电话号码,保留源字符串中数字的位置。
我有一个包含电话号码列表的任意字符串。它们不规则地列出,穿插着各种标记和标点符号,例如:
mobile:
手机号码前的标记tel.:
通常在电话之前标记。它可以是任何版本,例如Tel:
,tel. :
,tel.
,TEL:
。它可以以任何数量出现在任何地方。,
,.
,{space}
,{tab}
作为分隔符。
一般来说,源字符串中的“电话号码”是一个符合正则表达式的字符串:
/[0-9 +()-]+/
因此,我可以使用上述正则表达式成功匹配源字符串中的所有电话。但是,我不能只做 AFAIK str.replace(regexp, replacement)
,因为数字的处理将由libphonenumber完成。
我必须保留数字周围的所有噪音,因为它并不总是噪音。或者我只是统一地重新格式化整个字符串。
我想,这个问题可以推断如下:如何将函数映射到正则表达式找到的所有子字符串上,但没关系。
有什么办法可以做上面描述的事情吗?目标语言是 Javascript(确切地说,是 Adobe Illustrator 脚本引擎可解析的那种 Javascript)。
例子
语言是俄语。电话的强制格式是“国际”(在 libphonenumber 文档中如何调用)。
输入:Тел: (343) 378-33-00, моб.: +7(904) 54-73-818
期望的输出:Тел: 8 (343) 378-33-00, моб.: 8 (904) 547-38-18
这里只是重新格式化数字。令牌Тел:
并, моб.:
保持原样。
输入: 8(495) 941 93 20 моб. 8 915-295-62-86
期望的输出:8 (495) 941-93-20 моб. 8 (915) 295-62-86
在这里,我们也只是重新格式化了数字。令牌моб
及其周围的空间保持原样。
输入:Тел: 8(495) 685-95-95 доб.:4093, моб.: +7(916) 885-11-58
期望的输出:Тел: 8 (495) 685-95-95 доб.:4093, моб.: 8 (916) 885-11-58
不要关心空格折叠或正确放置标点符号,它将在处理的后期阶段完成。