2011-02-09 15 views
0

マイテキストregexを使ってテキストを抽出するには?

1618148163#@#JASSER-PC#-#1125015374#@#anas kayyat#-#1543243035#@#anas kayyat#-# 

結果は次のようになります。

JASSER-PC 
anas kayyat 
anas kayyat 

私が使用しています:

(?<=#@#)(.+)(?=#-#) 

しかし、それはことを私に与えます:

JASSER-PC#-#1125015374#@#anas kayyat#-#1543243035#@#anas kayyat 
+0

Javascriptの正規表現では、アサーション '(?<...)'と正のルックアヘッド '(?= ...)'はサポートされていません。 –

+0

@Linus:半分右 - 先読みがサポートされている、後ろ向きはサポートされていません。 –

+0

@Linus Kleen:先読みアサーションがサポートされています。 – Gumbo

答えて

4

はJavaScriptの正規表現は、ルックビハインドアサーション(すなわち(?<=…)(?<!…))をサポートしていませんので、あなたはその正規表現を使用することはできません。しかし、あなたはこれを使うことができます:

#@#(.+)(?=#-#) 

その後、最初のグループの一致した文字列を取るだけです。さらに、できるだけ一致させないようにするには、+?を使用して+限定子を非貪欲にします。

0

JavaScriptがSUPPないがオットーのヒアビハインド。数量詞は、非貪欲、および使用してください:

var regex = /#@#(.+?)#-#/g; 
var strings = []; 
var result; 
while ((result = regex.exec(input)) != null) { 
    strings.push(result[1]); 
} 
0

グループ(.+)は可能な限り一致します(「貪欲」です)。最小限の一致を見つけるために、(.+?)を使用することができます。

0

正規表現を使用することは必ずしも適切ではないので、私は、あなたに非正規表現の答えを与えるだろう、それは速度や正規表現自体のreadibilityこと:使用して、今すぐ

function getText(text) { 
    var arr = text.split("#@#"); // arr now contains [1618148163,JASSER-PC#-#1125015374,anas kayyat#-#1543243035,anas kayyat#-#] 
    var newarr = []; 

    for(var i = 0; i < arr.length; i++) { 
     var index = arr[i].indexOf("#-#"); 

     if(index != -1) { // if an array element doesn't contain "#-#", we ignore it 
      newarr.push(arr[i].substring(0, index));  
     } 
    } 

    return newarr; 
} 

getText("1618148163#@#JASSER-PC#-#1125015374#@#anas kayyat#-#1543243035#@#anas kayyat#-#"); 

は、あなたが望むものを返します。

関連する問題