Javascript 这个正则表达式是什么意思。检查http或https超链接是否足够?
有人能提供建议吗?“全部替换”方法是如何工作的Javascript 这个正则表达式是什么意思。检查http或https超链接是否足够?,javascript,regex,Javascript,Regex,有人能提供建议吗?“全部替换”方法是如何工作的 message = message.replaceAll("(?:https?|http?)://[\\w/%.\\-?&=!#]+", "<a href='$0' target='_blank'>$0</a>"); message=message.replaceAll(“(?:https?| http?)://[\\w/%.\\-?&=!\\]+”, ""); 您可以在这里测试regexp:它还有几个用户贡献的r
message = message.replaceAll("(?:https?|http?)://[\\w/%.\\-?&=!#]+",
"<a href='$0' target='_blank'>$0</a>");
message=message.replaceAll(“(?:https?| http?)://[\\w/%.\\-?&=!\\]+”,
"");
您可以在这里测试regexp:它还有几个用户贡献的regexp,您可以尝试。我尝试了你的regexp,但没有得到任何匹配项。但是我玩了一会儿,我想你的意思是:(?:https?)://[\w/%.\-?&=!\\]+
,而且,我建议你使用
message = message.replaceAll(/(?:https?):\/\/[\w\/%.\-?&=!#]+/g,
"<a href='$0' target='_blank'>$0</a>");
请注意,我将整个regexp设置为一个捕获组,并将$0替换为$1。您还可以有多个捕获组,例如
(https?):\/\/([\w\/%.\-?&=!\35;]+)
,这里$1将是您的协议(http或https),$2将是链接的其余部分,例如something.com?i=1
您可以在这里测试regexp:它还有几个用户贡献的regexp,您可以尝试。我尝试了你的regexp,但没有得到任何匹配项。但是我玩了一会儿,我想你的意思是:(?:https?)://[\w/%.\-?&=!\\]+
,而且,我建议你使用
message = message.replaceAll(/(?:https?):\/\/[\w\/%.\-?&=!#]+/g,
"<a href='$0' target='_blank'>$0</a>");
请注意,我将整个regexp设置为一个捕获组,并将$0替换为$1。您还可以有多个捕获组,例如
(https?):\/\/([\w\/%.\-?&=!\]+)
,这里$1将是您的协议(http或https),$2将是链接的其余部分,例如something.com?i=1
我不知道java正则表达式。
但我试图解释基于javascript的正则表达式
(?:https?| http?
:http或https,如果不存在则可以。(?:…)表示没有内存分配。只要过去
://
:这是与“://”相同的字符
[\\w/%.\\-?&=!\\]+
:这是正则表达式类,\\w
:所有字符,(javascript应为'\w'/,%,\,-,?,&,=,!,#
允许使用字符。+
表示一个[]或多个[]。及
$0
:仅返回完整匹配的地址部分,不包括“http”或“https”(javascript以索引1开头)。我不知道java正则表达式。
但我试图解释基于javascript的正则表达式
(?:https?| http?
:http或https,如果不存在,可以。(?:…)表示没有内存分配。只需传递即可
://
:这是与“://”相同的字符
[\\w/%.\\-?&=!\\]+
:这是正则表达式类,\\w
:所有字符,(javascript应为'\w'/,%,\,-,?,&,=,!,#
允许使用字符。+
表示一个[]或多个[]。及
$0
:仅返回完整匹配的地址部分,不包括“http”或“https”(javascript以索引1开头)。它说,与
http
,或https
://
[a-zA-Z0-9]
,/
,%
,-
,?
,&
,=
,!
或
现在,它会匹配所有的URL吗?不会。大部分,但不是全部。它会匹配我的名字boxiehttp://random
,理想情况下,您应该在liek\\b
[删除误导性评论]它说,匹配一个字符串或字符串的一部分
http
,或https
://
[a-zA-Z0-9]
,/
,%
,-
,?
,&
,=
,!
或
现在,它会匹配所有的URL吗?不会。大部分,但不是全部。它会匹配我的名字boxiehttp://random
,理想情况下,您应该在liek\\b
[删除误导性评论]是一个字符串
类方法,匹配正则表达式
,并将其替换为参数化字符串。参数(如$0
)是匹配索引
您的regex
应该匹配所有URL并将其转换为锚定标记,但我建议进行一些改进:
- 在正则表达式中,您正在使用
(?:SOMETHING)匹配非捕获组,并且(?:https?| http?
使前面的字符可选(因此它匹配?
和http
) 您将使用htt
https?
- 在正则表达式类中通常不需要转义字符(如
或-
)&
因此,问题是:
.replaceAll("https?://[\\w/%.-?&=!#]+", "<a href='$0' target='_blank'>$0</a>");
.replaceAll(“https?:/[\\w/%.-?&=!#]+”,“”);
是一个String
类方法,与Regex
匹配,并用参数化字符串替换。参数(如$0
)是匹配索引
您的regex
应该匹配所有URL并将其转换为锚定标记,但我建议进行一些改进:
- 在正则表达式中,您正在使用
(?:SOMETHING)匹配非捕获组,并且(?:https?| http?
使前面的字符可选(因此它匹配?
和http
) 您将使用htt
https?
- 在正则表达式类中通常不需要转义字符(如
或-
)&
因此,问题是:
.replaceAll("https?://[\\w/%.-?&=!#]+", "<a href='$0' target='_blank'>$0</a>");
.replaceAll(“https?:/[\\w/%.-?&=!#]+”,“”);
您应该一步一步地了解以下内容:
(?:https?|http?)
|
->表示匹配https或http
?
->(仅在此处)表示可选元素,https中的“s”是可选的,http中的“p”也是可选的。您可能想做的是:“(https)?(http)?(?:https?|http?)://[\\w/%.\\-?&=!#]+
"<a href='$0' target='_blank'>$0</a>"
// 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);