替换"。"在一个字符串的多个网址中的[圆点]

时间:2012-10-31 17:37:45

标签: javascript regex node.js optimization logic

我想替换“。”从下面的输入到输出

之类的[dot]等标记

输入

  

这是一个问题。在stackoverflow.com上学习的最佳地点。节目。测试www.wikipedia.com

输出

  

这是一个问题。在stackoverflow [dot] com最好的学习地点。节目。测试www [dot] wikipedia [dot] com

问题

  1. 有可能test.for我们不能使用像/[a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,5}/gi这样的优秀正则表达式我认为最好使用下面更好的内容
  2. 也许我找到了解决方案;
  3. found = string.match(/([a-zA-Z0-9]+\.(com|co\.cc)|more\.domains)/gi);

    这项工作很棒,我有一个问题就是将它们加入/替换为原始字符串。任何解决方法,如how can we filter elements in array with regex in array with javascript?

    你会如何解决这个问题?顺便说一下,使用nodejs可以接受其他语言。

    感谢

2 个答案:

答案 0 :(得分:3)

正确处理www.example.com

tld = ["com", "org", "edu", "net"] // feel free to add more

var input = "this is a test.for a question. at www.stackoverflow.com " 
    + "the best place to learn. "
    + "programming.test wikipedia.com and windows.microsoft.edu";


re = new RegExp('\\S+\\.(' + tld.join('|') + ')\\b', 'g')

var dotted = input.replace(re, function($0) {
    return $0.replace(/\./g, "[dot]");
});

// this is a test.for a question. at www[dot]stackoverflow[dot]com the best place to learn. 
// programming.test wikipedia[dot]com and windows[dot]microsoft[dot]edu

答案 1 :(得分:1)

var input = "this is a test.for a question. at stackoverflow.com the best place to learn. programming. test wikipedia.com";
var dotted = input.replace(/(\S+)\.(com|org|edu|net)\b/gi, '$1[dot]$2');
// "this is a test.for a question. at stackoverflow[dot]com the best place to learn. programming. test wikipedia[dot]com"