JavaScript 和 Java 之间正则表达式模式的差异?

2024-04-03

在 JavaScript 中,我有以下内容:

function replaceURLWithHTMLLinks(text) {
    var exp = /(\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/ig;
    return text.replace(exp,"<a href='$1'>$1</a>"); 
}

它将输入字符串中的所有 URL 替换为带有锚标记的 URL 版本,以将其转换为链接。我正在尝试使用以下函数在 Java 中复制此功能:

private String replaceURLWithHTMLLinks(String text) {
    String pattern = "/(\\b(https?|ftp|file):\\/\\/[-A-Z0-9+&@#\\/%?=~_|!:,.;]*[-A-Z0-9+&@#\\/%=~_|])/i";
    return text.replaceAll(pattern, "<a href=\"$1\">$1</a>");
}

然而,虽然它在 JavaScript 中运行良好,但在 Java 中找不到任何匹配项,即使对于相同的输入字符串也是如此。我是否需要改变模式中的某些内容,或者发生了什么?


您需要去掉表达式周围的斜线和i最后是 Java 示例。您可以指定i分别标记。所以 JavaScript 的/blarg/i会变成"(?i)blarg".

你的代码会变成这样:

private String replaceURLWithHTMLLinks(String text) {
  String pattern = "(?i)(\\b(https?|ftp|file):\\/\\/[-A-Z0-9+&@#\\/%?=~_|!:,.;]*[-A-Z0-9+&@#\\/%=~_|])";
  return text.replaceAll(pattern, "<a href=\"$1\">$1</a>");
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JavaScript 和 Java 之间正则表达式模式的差异? 的相关文章

随机推荐