2011-12-25 19 views
5

は、私は次のようにありますJavaScriptとJava間の正規表現パターンの違いは? 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>"); 
} 

しかし、それは同じであっても、入力文字列のため、Javaでの任意の一致を見つけることができませんJavaScriptで正常に動作している間。パターンや何が起こっているのかを変更する必要がありますか?

+1

offtopicのため申し訳ありませんが、HTMLタグを解析するための正規表現を使用することは醜い...危険なおよびEMMです。 –

答えて

2

Javaの例では、式の周りにスラッシュを、最後にはiを取り除く必要があります。 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>"); 
} 
+0

ありがとう!それは完璧に働いた! –

1

あなたのコードのようなものになるだろうJavaのPatternは、このように動作しません。

あなたの正規表現は両方のエンジンと互換性がありますが、この方法ではJavaでは修飾子を指定しません。

の操作を行います。

Pattern pattern = Pattern.compile("\\b(https?|ftp|file):\\/\\/[-A-Z0-9+&@#\\/%?=~_|!:,.;]*[-A-Z0-9+&@#\\/%=~_|])", Pattern.CASE_INSENSITIVE); 
retrun pattern.matcher(text).replaceAll("<a href=\"$1\">$1</a>");