2

我想替换“。” 从输入下方到输出下方进入像 [dot] 这样的标记

输入

这是一个test.for一个问题。在 stackoverflow.com 上学习的最佳场所。编程。测试 www.wikipedia.com

输出

这是一个test.for一个问题。在 stackoverflow[dot]com 上学习的最佳场所。编程。测试 www[dot]wikipedia[dot]com

问题

  1. 有可能test.for我们不能使用好的正则表达式,/[a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,5}/gi我认为最好使用下面的东西
  2. 也许我找到了解决方案;

found = string.match(/([a-zA-Z0-9]+\.(com|co\.cc)|more\.domains)/gi);

这项工作很棒,我无法将它们加入/替换为原始字符串。任何解决方法,例如我们如何使用 javascript 在数组中使用正则表达式过滤数组中的元素?

你将如何解决这个问题?顺便说一句,我使用 nodejs 其他语言是可以接受的。

谢谢

4

2 回答 2

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
于 2012-10-31T18:23:30.353 回答
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"
于 2012-10-31T17:40:50.253 回答