1

このようなテキストがあります...

var string = '~a=123~b=234~c=345~b=456'

に分割されるように文字列を抽出する必要があります

['~a=123~b=234~c=345','']

つまり、文字列を/b=.*/パターンで分割する必要がありますが、最後に見つかったパターンと一致する必要があります。RegExを使用してこれを実現するにはどうすればよいですか?

注:等しい後に存在する数字はランダムに生成されます。

編集:

上記は一例です。私は私が推測する質問を明確にしませんでした。一般化された文字列は...

<word1>=<random_alphanumeric_word>~<word2>=<random_alphanumeric_word>..~..~..<word2>=<random_alphanumeric_word>

すべてランダムな長さで、すべての単語iはアルファベットであり、文字列全体の長さは固定されていません。知られている唯一のテキストはです<word2>。したがって、私はそれのために正規表現が必要であり、パターンは/<word2>=.*/

4

5 に答える 5

0

特定の部分を抽出したいことを考えると、これは正規表現の仕事のようには思えません。lastIndexOf代わりに、文字列を 2 つに分割するために使用できます。

var lio = str.lastIndexOf('b=');

var arr = [];
var arr[0] = str.substr(0, lio);
var arr[1] = str.substr(lio);

http://jsfiddle.net/NJn6j/

于 2013-01-27T19:24:52.727 に答える
0

使用できる結果を与える正規表現は次のとおりです。

string.match(/[a-z]*?=(.*?((?=~)|$))/gi);
// ["a=123", "b=234", "c=345", "b=456"]

しかし、あなたの場合、最も簡単な解決策は、コンテンツを抽出する前に文字列を分割することです:

var results = string.split('~'); // ["", "a=123", "b=234", "c=345", "b=456"]

オブジェクトに追加するキーと結果を簡単に抽出できるようになりました。

var myObj = {};
results.forEach(function (item) { 
    if(item) { 
        var r = item.split('='); 
        if (!myObj[r[0]]) {
            myObj[r[0]] = [r[1]]; 
        } else {
            myObj[r[0]].push(r[1]); 
        }
    } 
});
console.log(myObj);

物体:

  • a: ["123"]
  • b: [「234」、「456」]
  • c: ["345"]
于 2013-01-27T19:30:17.597 に答える
0

~形式が ( 、英数字の名前、 、および数字) であると仮定すると、=任意の回数繰り返されます。ここで最も重要な仮定は、~名前と値のペアごとに 1 回出現し、名前には出現しないということです。

単純な置換で最後のトークンを削除できます。

str.replace(/(.*)~.*/, '$1')

これは、貪欲なプロパティを使用して、入力*の最後~に一致させることで機能します。

lastIndexOf最後の のインデックスのみを知る必要があるため、これは を使用して実現することもでき~ます。

str.substring(0, (str.lastIndexOf('~') + 1 || str.length() + 1) - 1)

(まあ、上記のコードが良い JS かどうかはわかりません... むしろ数行で書きたいと思います。上記はワンライナー ソリューションを示すためのものです)。

于 2013-01-27T19:36:24.693 に答える
0

この種の問題に個人的に正規表現を使用するとは思いませんが、次のような正規表現を使用して最後のオプションのペアを抽出できます。

var str = '~a=123~b=234~c=345~b=456';
var matches = str.match(/^(.*)~([^=]+=[^=]+)$/);

// matches[1] = "~a=123~b=234~c=345"
// matches[2] = "b=456"

デモ: http://jsfiddle.net/jfriend00/SGMRC/

于 2013-01-27T19:36:48.527 に答える