0

正規表現は最も強力です。ただし、返される結果は役に立たない場合があります。

例えば:

セミコロンを使用して CSV 文字列を管理したい。次のような文字列を定義します。

var data = "John;Paul;Pete;Stuart;George";

命令を使用する場合:

var tab = data.match(/;/g)

何と、「タブ」には 4 つの「;」の配列が含まれています。:

tab[0]=";", tab[1]=";", tab[2]=";", tab[3]=";"

この配列は、正規表現を使用する前から知っていたので、現在のケースでは役に立ちません。

確かに、私がやりたいことは2つのことです:

  • 1つ目:4番目の要素を抑制します(「Stuart」を「Stuart」としてではなく、「Stuart」を4番目の要素として)
  • 2 番目に: 3 番目の要素を「Ringo」に置き換えて、(かつて所属していた場所に!) 次の結果を取得します。

    data == "John;Paul;Ringo;George";

この場合、セミコロンの位置を示す配列を取得したいと思います。

tab[0]=4, tab[1]=9, tab[2]=14 tab[3]=21

役に立たない代わりに(この特定のケースでは)

tab[0]=";", tab[1]=";", tab[2]=";", tab[3]=";"

それで、ここに私の質問があります:正規表現を使用してこの数値配列を取得する方法はありますか?

4

3 に答える 3

1

を取得するにはtab[0]=4, tab[1]=9, tab[2]=14 tab[3]=21、次のことができます

var tab = [];
var startPos = 0;
var data = "John;Paul;Pete;Stuart;George";

while (true) {

    var currentIndex = data.indexOf(";", startPos);

    if (currentIndex == -1) {
        break;
    }

    tab.push(currentIndex);
    startPos = currentIndex;

}

しかし、必要な結果がである"John;Paul;Ringo;George"場合は、次のことができます

var tab = data.split(';'); // Split the string into an array of strings

tab.splice(3, 1); // Suppress the 4th element
tab[2] = "Ringo"; // Replace the 3rd element by "Ringo"

var str = tab.join(';');   // Join the elements of the array into a string

あなたの場合、2番目のアプローチの方が良いかもしれません。

于 2013-09-26T09:08:30.013 に答える
0

regexこの操作を実行するためにa を使用する理由 組み込み関数 split があり、渡した区切り文字に基づいて文字列を分割できます。

var data = "John;Paul;Pete;Stuart;George";
var temp=data.split(';');
temp[0],temp[1]...
于 2013-09-26T09:06:03.543 に答える