Javascript 使用正则表达式查找URL,但不查找其后的值

Javascript 使用正则表达式查找URL,但不查找其后的值,javascript,regex,actionscript,Javascript,Regex,Actionscript,我看到了一些关于这方面的帖子,但它们是针对PHP的(我需要JavaScript(实际上是ActionScript(…因为ActionScript扩展了JavaScript)),所以我的问题是如何只捕获逗号、句点、问号或感叹号 这就是我到目前为止所做的 instructionText.replace(/(https?:\/\/\w.*[\w])/gi, "<a href='$1' target='_blank'>$1</a>"); instructionText.repl

我看到了一些关于这方面的帖子,但它们是针对PHP的(我需要JavaScript(实际上是ActionScript(…因为ActionScript扩展了JavaScript)),所以我的问题是如何只捕获逗号、句点、问号或感叹号

这就是我到目前为止所做的

instructionText.replace(/(https?:\/\/\w.*[\w])/gi, "<a href='$1' target='_blank'>$1</a>");
instructionText.replace(/(https?:\/\/\w.[\w])/gi,”;
但是当我使用文本“Visit.helloworld”时,它捕获了helloworld部分

上面捕获组的结果为“http://google.com. “你好,世界”。很明显,我不想在URL后添加任何内容。它们应该是简单的URL

主要是,我只想添加一个“,!?”或空格字符的检查,并结束捕获组。它不一定是完美的


顺便说一句,不确定你是否有什么东西要先测试你的正则表达式,如果没有,你可以使用

问题是您正在捕获
*
后接
\w
,这意味着任何数量的内容后接一个单词

/(https?:\/\/\w.*[\w])/
你需要使你的通配符捕获不可用

/(https?:\/\/\w.*?[\w])/
因此,在捕获
\w


编辑:更多信息

此外,您的正则表达式非常简单,不幸的是,捕获url非常复杂,因为有太多有效和无效的变体。您需要为自己定义一条清晰的线,在其中定义您认为与上下文相关的URL的良好匹配。 例如,如果您想确保有效的顶级域,您必须包括以下内容

/https?:\/\/\w.*?\.(com|org|co\.uk| ... etc ... )/
一旦注册了新的顶级域,它就会过时

如果您想匹配从协议开始到下一个空间的任何内容,类似这样的操作应该可以

/[a-zA-Z]+:\/\/\S+/

祝你好运

在正则表达式中,您要寻找尽可能多的字符(.*是贪婪的),其中最后一个字符是\w字符。试试这个(快速编辑你的正则表达式)。它应该适用于有或没有
www.
的域,以及有两个或三个字母tld的域

https?\:\/\/(www\.)?\w*?\.\w{2,3}(?=[\W])

假设URL中没有空格,并且URL后面有空格或字符串结尾:

instructionText.replace( /(https?:\/\/\S+?)(?=[.,!?]?(\s|$))/g, "<a href='$1' target='_blank'>$1</a>" );
instructionText.replace(/(https?:\/\/\S+?)(?=[,!?])(\S |$)/g,“”;
它尽可能少地捕获“http[s]:/”和非空格字符,直到前面有一个可选的
,然后是空格或字符串的结尾

https?\:\/\/((www\\.)?\w*?(\\.\w{2,7})+)(?=\\.|\\,|\\?|\\!|\s)

我猜
(?=\.\124;\\,\ 124\?\ 124\\!\ 124;\ s)
这就是你要找的部分?

听起来你需要一个非捕获组。你看过www.regular-expressions.info吗?他也应该看看这个部分。这将捕获URL结尾处的句点。
\w\w?
更清楚地写为
\w{2,3}
[^\w]
\w
相同。更新以反映注释,而不是捕获最后一个字符(句点)。我想\w\w\w?或\w{2,3}是相同数量的字符,因此不妨将其写长。不过我同意,为了清楚起见,2,3更容易阅读。如果你在部分内容周围加上括号,那就行了。所以这个,(https?\:\/\/(www\)?\w*?\。\w{2,3})(?=[\w])