2016-05-11 5 views
2

で区切られたキーと値のペア内のテキストを取得するために私はここに私の正規表現の例があります。次の文字列の場合https://regex101.com/r/kE9mZ7/1regexpはコロン

key_1:おそらくいくつかのテキスト、コンマ、セミコロンで終わるを; key_2:おそらくなしに終了セミコロンでテキストが、

可能性があり、私は、次のような何かをしたいと思います:

var regEx_attrVal = /[\w :].*?(?=;|$)/g; 
var results = attrs.match(regEx_attrVal); 
     for(i=0;i<results.length;++i) { 
     var split = results[i].split(':'); 

     preColon = split[0].trim(); 
     postColon = split[1].trim(); 

     //log preColon and postColon to console 

     } 

最終的な結果のようなものでなければなりません:

//results[0] 
preColon: key_1 
postColon: some text, maybe a comma, ending in a semicolon 

//results[1] 
preColon: key_2 
postColon: text with possibly no ending semicolon, but could be 

私の正規表現あまりにも間違っている、SOコミュニティが助けることを望む!

ありがとうございます!あなたはg修飾子を追加する必要が

+2

スプリットする必要はありません。['(\ w +):\ s *([^;] *)'](https://regex101.com/r/fS1lD8/1)グループ1と2にアクセスしてください。 –

+0

@WiktorStribiżewnice!あなたは私に時間と欲求不満を救った - ありがとう! –

+0

@WiktorStribiżew - はい、それは質問への答えです。私はあなたがRegexでそれを行う方法のポストに直接関係していますが、私もgurvinder372の答えに印を付けることができました。これらのクエリの1000のような何かを扱うときに正規表現と分割アプローチのパフォーマンスの違いについての任意のアイデア? –

答えて

2

ここではeへの正規表現ですこれらの値xtract:

/(\w+):\s*([^;]*)/gi 

または(識別子_または文字で始まらなければならないように):ここ

/([_a-z]\w*):\s*([^;]*)/gi 

regex demo

var re = /([_a-z]\w*):\s*([^;]*)/gi; 
 
var str = 'key_1: some text, maybe a comma, ending in a semicolon; key_2: text with no ending semicolon'; 
 
while ((m = re.exec(str)) !== null) { 
 
    document.body.innerHTML += m[1] + ": " + m[2] + "<br/>"; 
 
}

特許ありますアジサシ詳細

  • ([_a-z]\w*) - グループ1 _または文字で始まる識別子に一致するとは0+と続く英数字/アンダーシンボル
  • : - 結腸
  • \s* - 0+空白
  • ([^;]*) - ;以外の0文字。 ネゲートされた文字クラスを使用すると、後で(?:$|;)グループと一致する遅延ドットを使用する必要がなくなります。 *数値化子は値を任意にします。必要な場合は、+を使用してください。
1

DEMO

正規表現は必須ではありません場合は、

var input = "key_1: some text, maybe a comma, ending in a semicolon; key_2: text with no ending semicolon"; 
var keyValues = input.split(";"); 
keyValues.forEach(function(val){ 
    var keyValue = val.split(":"); 
    alert("precolon " + keyValue[0]); 
    alert("postcolon " + keyValue[1]); 
}); 
+0

'/ g'だけでなく、OP正規表現は空文字列と一致することができます。 –

+0

@ gurvinder372これは問題を同様にうまく解決します - ありがとう!さらに、Regexでこの時点で失われているように感じるので、私にとってははるかに簡単です(私はすべてのことを学ぶための時間が必要でした)。対処するときに正規表現アプローチと分割アプローチを使用する場合のパフォーマンスの違いは、これらのクエリの1000倍を意味します。 –

+0

@RonI喜んで助けてください:) – gurvinder372

0

にこの正規表現を試してみてくださいあなたのためのトリックへ:

/(\w+):([^;]*)/g 

Example here