2009-07-30 7 views
0

パターンに一致するセミコロンで区切られた文字列から最初のユーザー権利を抽出しようとしています。csv文字列を検索し、Javascript正規表現を使用して一致を返す方法

ユーザーの権限は形式で保存されます。ユーザーは任意の権限を持っていない場合は LAA;LA_1;LA_2;LE_3;

文字列は空です。 が.*?;(LA_[^;]*)?.*

(グループの最後にクエスチョンマークがケースのユーザーには、全体のラインを一致させるためのものであるが、持っていない:

私の最善の解決策は、これまでregex.replace文の中で、次の正規表現を使用することです。右、彼女はそれを持っていないことを知らせるために、空の文字列に置き換える)

しかし、それは検索右の場合には正しく動作しませんが最初の位置にある: LA_1;LA_2;LE_3;

それはさただ簡単にそれを修正する正規表現の前に行の先頭にセミコロンを追加するが、私の質問は、なぜ次の正規表現にマッチしないのだろうか?

.*?(?:(?:^|;)(LA_[^;]*))?.*

私は解決策を見つけるために、他の多くの正規表現を試みたが、これまでのところ成功なしています。

答えて

0

を私は右のあなたの質問を取得することを確認していない、しかし、あなたが使用している正規表現に関しては、あなたが(で明確な理由のためにそれらを過度に複雑さ少なくとも私には)。一つの問題は、冒頭に、このミックスで、具体的な質問「?なぜそれが次の正規表現と一致しない」と答えるために

function getFirstRight(rights) { 
    var m = rights.match(/(^|;)(LA_[^;]*)/) 
    return m ? m[2] : ""; 
} 
+0

ありがとう!どういうわけか私はマッチ機能を見落とし、私の "簡単な解決策"はまだバグを残していました。 :) 私はあなたのアイデアをactionscript3に移植しましたが、今度は次のフォームを持っています: ' public function getRole():String { (LA _ [^;] *)/。test( this._rightsList)))? this._rightsList。マッチ(/(^ |;)(LA _ [^;] *)/)[2]: ""; } 「 –

0

あなただけの最初の文字列を分割することができます:

function getFirstRight(rights) 
{ 
    return rights.split(";",1)[0] || ""; 
} 
+0

申し訳ありませんが、権利と正規表現は、あなたが答える前にフォーマットが間違っていました。 LAA; LA_1; LA_2; LE_3; LAAを返しますが、正しいLAAはLAAです。 –

0

:あなたのような何かをしたい場合があります

.*? 

最終的に

あなたが開始またはセミコロンのいずれかに到達するまで、すべての余分な文字をスキップ、というようなことがあります
^|; 

:続きます。しかし、何かをスキップしてから、最初に到着することはできません(複数行の文字列に改行が含まれていない限り)。

.*?(\bLA_[^;]).* 

意味、 "LA_" に続く単語の境界までの文字をスキップ:この作品のような

何か。

+0

ありがとうございます。 Somewhy。*?(\ bLA _ [^;] *)?。*はまだ一致しません。最後の疑問符は、0または1つのオカレンスを照合するためのものです。私はそれを削除する場合、それはちょうど1つの発生と一致します。 私はmatch-functionを使って問題を解決しましたが、なぜ最後の正規表現がマッチしないのか理解したいと思っています。 –

+0

コメントに「*」が追加されているようです。あなたのコードで試してみる前にそれがあったのか、それとも何か他にあなたのために最初に問題があったのかどうかは分かりません。しかし、とにかく、私は二重チェックして、両方の文字列、および両方の置換()と一致()の両方を動作するようです: var reg = /.*?(\bLA_[^;]).*/ var s1 = 'LAA; LA_1; LA_2; LE_3;'; var s2 = 'LA_1; LA_2; LE_3;'; アラート(s1.replace(reg、 '$ 1')); アラート(s2.replace(reg、 '$ 1')); アラート(s1.match(reg)[1]); アラート(s2.match(reg)[1]); – epost

関連する問題