我将电话号码转换为可点击的网址。我有一个带有随机电话号码的html字符串,以非特定/一致的方式出现:
Fidel Velazquez(834)316-90-90
↵Libertad(834)316-2930
↵
我正在使用正则表达式来搜索事件并且" linkify"他们,这是有助于此的功能:
var regex = new RegExp(
"\\+?\\(?\\d*\\)? ?\\(?\\d+\\)?\\d*([\\s./-]?\\d{2,})+",
"g"
);
return inputText.replace(regex, '<a href="tel:$&">$&</a>');
问题是,对于上面的示例,我在电话号码前面有一个空白区域,这就是阻止html链接正常工作(即我得到&#34;( 834)316-90-90&#34;而不是&#34;(834)316-90-90&#34;)。
我的正则表达式可以直接更改吗?或者有没有办法应用.replace(&#39;&#39;&#39;&#39;);只发生了?
谢谢!
答案 0 :(得分:2)
您可以使用替换功能,允许您自定义替换字符串。
var inputText = `Fidel Velazquez (834)316-90-90
Libertad (834) 316-2930
`;
var regex = new RegExp(
"\\+?\\(?\\d*\\)? ?\\(?\\d+\\)?\\d*([\\s./-]?\\d{2,})+",
"g"
);
var output = inputText.replace(regex, function(m) {
var match = m.replace(/ /g, '');
return `<a href="tel:${match}">${m}</a>`;
});
console.log(output);
&#13;
或者你可以构建一个更仔细的正则表达式,将原始分开,并使用捕获组以不同的方式将它们组合在一起。这是更受限制的,但足以满足您的描述。 (另外,new RegExp
不是惯用语,只有在动态生成正则表达式时才使用它。)
对于您的特定问题,您甚至可以要求仅在前一个匹配时才匹配空间......许多不同的解决方案,具体取决于您的要求。请注意,此正则表达式还会匹配一些看起来不像电话号码的内容: