1

我对 RegExp 很不熟悉,我试图实现它来检测字符串中的 url。我想使用的一个正则表达式是这个(请不要提供你自己的):

/(((http|ftp|https)://)?[\w-]+(\.[\w-]+)+([\w.,@?^=%&:/~+#-]*[\w@?^=%&/~+#-])?)/g

并用以下内容替换所有匹配项:

<a href="$1">$1</a>

如果您使用该示例访问http://gskinner.com/RegExr/并在替换中使用它,您会看到它完美无缺,但是不可能在 javascript 中构建一个有效的解决方案。

var text = "hi, demo link http://stackoverflow.com is a great website"
//regexp magic


//expected result:
textWithLink ="hi, demo link <a href="http://stackoverflow.com">http://stackoverflow.com</a> is a great website"
4

3 回答 3

2
var str = 'hi, demo link http://stackoverflow.com is a great website',
    regex = /(((http|ftp|https):\/\/)?[\w-]+(\.[\w-]+)+([\w.,@?^=%&amp;:\/~+#-]*[\w@?^=%&amp;\/~+#-])?)/g;
str.replace(regex, '<a href="$1">$1</a>');

注意:这是您的确切正则表达式,我只是避开了正斜杠。

于 2013-02-26T15:31:55.783 回答
1

你可以这样做

var ok = /(((http|ftp|https):\/\/)?[\w-]+(\.[\w-]+)+([\w.,@?^=%&amp;:/~+#-]*[\w@?^=%&amp;/~+#-])?)/.test(str);

测试字符串是否为 URL。

如果要在字符串中查找 URL,请使用

var matches = str.match(/(((http|ftp|https):\/\/)?[\w-]+(\.[\w-]+)+([\w.,@?^=%&amp;:/~+#-]*[\w@?^=%&amp;/~+#-])?)/g);

请注意,这是一个正则表达式文字,我必须转义/.

于 2013-02-26T15:22:38.923 回答
1

您提供的 RegExp 文字无效:

/(((http|ftp|https)://)?[\w-]+(\.[\w-]+)+([\w.,@?^=%&amp;:/~+#-]*[\w@?^=%&amp;/~+#-])?)/g
^                   ^^
Start               |\__ Error
                    |
                   End

它在您提供的链接中有效,因为该应用程序会自动去除分隔符并无意中修复了错误。

于 2013-02-26T15:29:49.263 回答