2012-03-21 12 views
0

外のURLと一致するようにします javascriptのコメント機能。Regex "URL"コメント外

のURLのための正規表現は:

この例を与え
((mailto\:|(news|(ht|f)tp(s?))\://){1}\S+) 

/* http://goog.le */ 
http://goog.le 

それだけで二と一致する必要があります。

私は成功せず、この正規表現で、これまでhereを試してみました:アドバイス

+0

だけでなく、内部の一致だろう文字列で十分でしょうか? – Qtax

答えて

1

ため

(/*)[^(*/)]*((mailto\:|(news|(ht|f)tp(s?))\://){1}\S+) 

おかげで一般的には正規表現を解析し、この種のを行うのは難しい(確かに不可能ではない)だ - あなたが持っています入力のような前提を整えるのは順調です。

あなたの正規表現では、{1}は削除できるので冗長です。

あなたはそれが*/(無一致/*付き)が続いない場合にのみ、URLに一致する次のようなものを、行うことができます。例えば、あなたが一致/*を持たずにソースで*/を持っている場合はもちろん

((mailto\:|(news|(ht|f)tp(s?))\://)\S+)(?!([^*/]|\*[^/]|/[^*])*\*/) 

、これは失敗します。ロジックは、それが*/続いであれば、それはコメントで、おそらくということです

/* http://goog.le */ # this won't match 
http://goog.le  # this will match 
http://google/ "*/fdsa" # this won't match! 

私はあなたがよく形成されている入力に依存しているいくつかの方法で意思を取る任意の正規表現のアプローチを考える - あなたはJavaScriptを使用している場合は、それを使用することが可能である(

コメントはバランスがとれている、など何らかのXML構文解析が代わりに使用されていますか?これはより多くはであり、いずれの場合もコメントを無視できるようになります)。

+0

これは 'http:// google// *他のコメント*/'と一致しません。 – porges

+0

ああ、私は何かを忘れていることを知っていました - 正規表現を更新します。乾杯。 –

+0

@mathematical。コーヒー+1 thxの作業正規表現、制限の説明と私は広範なアプローチのために検討しようとするxmlの提案。 – Email

1

リプレイスを使用して、http://jsfiddle.net/92ma8/のような文字列とエスケープで機能します。

この文字列で
// remove comments 
// if you want to remove single line comments as well add: |\/\/.* 
var nocomments = code.replace(/("(?:[^"\\]*|\\.)*"|'(?:[^'\\]*|\\.)*')|\/\*[^]*?\*\//g, "$1"); 

// do your matching 
var result = nocomments.match(/[a-z]+:\/\/\S+/gi); 

/* http://aaa.com */    
http://bbb.com      
// http://ccc.com     
http://ddd.com "will \"*/ /*work" 
"/* http://eee.com */ works" 

それは一致します

http://bbb.com 
http://ccc.com 
http://ddd.com 
http://eee.com 
+0

良いアイデア+1。しかし、私は本当に正規表現のソリューションを検索 – Email

0
((?<!\/\*)) #Negative lookbehind 
    ((mailto\:|(news|(ht|f)tp(s?))\://)\S+)(?!([^*]|\*[^/])*\*/) 
(
    ?(1) # Ensure the negative lookbehind has matched (Embedded Condition) 
    (?!\*/) # Ensure the negative lookahead 
) 

は、ここに1つのライナー

((?<!\/\*))((mailto\:|(news|(ht|f)tp(s?))\://)\S+)(?!([^*]|\*[^/])*\*/)(?(1)(?!\*/)) 
+0

@パヌッチャは、URLに一致しません。 – Email

+0

.NETエンジンを使ってRegexBuddyを使ってテストしましたが、正常に動作しました。私は単純にあなたの正規表現を使用してURLにマッチさせました。あなたがあなたの質問で与えた "http://goog.le"の例のために、それは動作します。 –