2016-05-06 3 views
1

私は正規表現では最高ではありませんし、助けが必要です。Javascriptの正規表現 - 2つの部分文字列を一致させる

私はこれらの種類の文字列を持っています:data-some-thing = "5 10 red"。 Wordの 'data-some'は一定であり、 '事'が変わります。 「もの」にはダッシュが含まれることもあります。二重引用符で囲まれた値には、英数字の記号またはスペースのみが含まれます。

正規表現のみを使用して二重引用符で 'thing'と値を取得することは可能ですか?はいの場合、私はどのような表現を使うべきですか?私は見た目を使ってみましたが、それほど成功しませんでした。

+0

明らかに(?)これはHTML要素のデータ属性です。 HTMLでregexpを使って何かをしようとしているのはなぜですか?その代わりに、HTML要素の属性(または 'elt.dataset')を正しい形式の属性で検索すると、属性の値を直接取得できます。 –

+0

私はそれをしますが、ブラウザの文書ではなくノードを使用して文字列を解析しています。申し訳ありませんが完全にはっきりしていない:) – Thinch

+1

これはJSとのHTMLを解析すべきでないという事実を変更しません。必要に応じて、ノードにDOMパッケージを使用します。 –

答えて

3

あなたは使用することができます

  • 0:結果の配列は、3つの要素があります

    var result = data.match(/data-some-(.*?)="(.*?)"/); 
    

  • 1(ないあなたの興味の)完全な一致を:可変部分を前に、等号
  • 2:引用符間の値。

デモ:

var data = 'data-some-thing="5 10 red"'; 
 
var result = data.match(/data-some-(.*?)="(.*?)"/); 
 

 
document.write(result[1] + '<br>' + result[2]);

免責事項:

あなたは大きなHTMLの解析の文脈でこれをやっている場合(それがで言及されていないことに注意してください質問)では、正規表現を使用しないでください。代わりに、DOMにHTML文字列をロードし、そしてあなたが興味を持っている属性名と値のペアを見つけるために、DOMメソッドを使用する必要があります。

のNode.jsについてあなたがこれを行うにはnpmモジュールjsdomhtmlparserを使用することができます。

+0

私はドットとスターを理解していますが、ここで疑問符がどのように働くのか説明できますか?答えてくれてありがとう。すぐにそれをマークするつもりです:) – Thinch

+0

疑問符は前の星に影響します。それは欲張りから怠惰な星に変わります。実際には、正規表現が前方に進み、それに続くパターンにマッチするとすぐに、それがそうするでしょう(怠け者)。疑問符がなければ、以下のデータは間違った方法で分割されます。 'data-some-thing =" 5 10 red ";いくつかの他のもの= "hallo"。 – trincot

+0

HTMLをregexpで解析しようとする無駄のほんの一例として、属性値が一重引用符で囲まれていると、これは失敗します。等号の両側にスペースがあると失敗します。 'xxx-data-some-thing'という形式の入力で失敗します。 HTMLなどを正規表現で解析しないでください。 –

関連する問題