在字符串

时间:2016-12-13 05:56:32

标签: javascript regex

我将电话号码转换为可点击的网址。我有一个带有随机电话号码的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;);只发生了?

谢谢!

1 个答案:

答案 0 :(得分:2)

您可以使用替换功能,允许您自定义替换字符串。

&#13;
&#13;
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;
&#13;
&#13;

或者你可以构建一个更仔细的正则表达式,将原始分开,并使用捕获组以不同的方式将它们组合在一起。这是更受限制的,但足以满足您的描述。 (另外,new RegExp不是惯用语,只有在动态生成正则表达式时才使用它。)

对于您的特定问题,您甚至可以要求仅在前一个匹配时才匹配空间......许多不同的解决方案,具体取决于您的要求。请注意,此正则表达式还会匹配一些看起来不像电话号码的内容: