这个正则表达式意味着什么。检查http或https超链接是否足够?

时间:2012-02-04 08:24:59

标签: javascript regex

任何人都可以提供建议吗?如何替换所有方法?

message = message.replaceAll("(?:https?|http?)://[\\w/%.\\-?&=!#]+",
"<a href='$0' target='_blank'>$0</a>");

5 个答案:

答案 0 :(得分:1)

你可以在这里测试你的正则表达式:http://gskinner.com/RegExr/它还有一些你可以尝试的用户贡献的正则表达式。我试过你的正则表达式并没有得到任何匹配。但我玩了一下,我认为你的意思是:(?:https?)://[\w/%.\-?&=!#]+而且,我建议你使用

message = message.replaceAll(/(?:https?):\/\/[\w\/%.\-?&=!#]+/g,
"<a href='$0' target='_blank'>$0</a>");
希望我帮忙。

编辑: 我没有找到replaceAll方法的任何文档,所以我建议你使用replace方法。你可以在这里试试:http://w3schools.com/jsref/jsref_replace.asp

此外,您没有任何捕获组(标有()),因此$ 0在您的替换中不起作用。所以它应该是

message = message.replaceAll(/((?:https?):\/\/[\w\/%.\-?&=!#]+)/g,
"<a href='$1' target='_blank'>$1</a>");

请注意,我将整个正则表达式设为一个捕获组,并将$ 0替换为$ 1。您也可以拥有多个捕获组。 (https?):\/\/([\w\/%.\-?&=!#]+)这里$ 1将是你的协议(http或https),$ 2将是链接ex的其余部分。 something.com?i=1

答案 1 :(得分:1)

它说,匹配字符串或字符串的一部分

  1. httphttps
  2. 后跟://
  3. 后跟一个或多个单词字符[a-zA-Z0-9]/%.-?,{{ 1}},&=!
  4. 将其替换为#

    现在,它会匹配所有网址吗?不,大多数情况下,但不是全部。它会匹配<a href='MATCHED_STRING' target='_blank'>MATCHED_STRING</a>,理想情况下,您可能希望设置一个单词边界谎言my name is boxiehttp://random

    [删除误导性评论]

答案 2 :(得分:1)

replaceAll是一个String类方法,匹配Regex并将其替换为参数化字符串。参数(如$0)是匹配索引。

您的regex应该匹配所有网址并将其转换为锚标记,但我建议您做一些改进:

  • 在正则表达式中,您使用的是(?:https?|http?)(?:SOMETHING)与非捕获组匹配,?使前一个字符可选(因此它与httphtt匹配。)

    您可以使用https?代替。

  • 通常没有必要在正则表达式类中转义字符(如-&)。


所以regex将是:

.replaceAll("https?://[\\w/%.-?&=!#]+", "<a href='$0' target='_blank'>$0</a>");

答案 3 :(得分:1)

您应该一步一步地理解这一点:

(?:https?|http?)

| - &gt;表示OR,因此表示匹配https或http

? - &gt; (仅此处)表示可选元素,https中的“s”是可选的,或者来自http的“p”也是可选的。您可能想要做的是:“(https)?|(http)?”,使每个可选。但这仍然是错误的,因为你可以匹配像这样的字符串:“://someLink” - 这没有意义。

我想你想要匹配https或http,因此你的正则表达式需要更改为:

 https? (to make only the s optinal)

?: - &gt;它定义了一个非捕获组(这意味着它将匹配但不存在于输出中 - 未在结果中捕获),这与正则表达式组相关。

() - &gt;意味着这是一个群体     事实上,这是第二组(第一组是整场比赛)

上面已经解释了这个正则表达式“://[\\w/%.\\-?&=!#]+”我觉得很好。

以下是“魔术”:“$0”,这称为对匹配组的反向引用。所以在你的消息String中,你与正则表达式匹配的结果是:

(?:https?|http?)://[\\w/%.\\-?&=!#]+

将替换为:

"<a href='$0' target='_blank'>$0</a>"

其中$0实际上是第一个正则表达式找到的东西。

这是一个实际的例子:

// I've simplified: \\w+ any number of characters
String regex = "https?://\\w+";
String input = "http://value1 ; https://value2";
input = input.replaceAll(regex, "<a href='$0' target='_blank'>$0</a> ");

// this will output : 
// <a href='http://value1' target='_blank'>http://value1</a>  ; <a href='https://value2' target='_blank'>https://value2</a>
System.out.println(input);

答案 4 :(得分:0)

我不知道java正则表达式。 但我试着用javascript解释正则表达式。

(?:https?|http?):http或https,好吧,如果不存在的话。 (?:...)表示没有内存分配。只是通过。

://:这是与“://”相同的字符

[\\w/%.\\-?&=!#]+:这是正则表达式类,
    \\w:所有角色,(javascript应为'\ w'
    允许使用/, %, \, -, ?, &, =, !, #个字符     +表示一个[]或更多[]。

$0:返回整个匹配的地址部分,不包括“http”或“https”(javascript以索引1开头)。