4

重複の可能性:
文字を失うことなくJavaScriptを分割

私は文字列を持っています:

"<foo>abcdefg</bar><foo>abcdefg</bar><foo>abcdefg</bar><foo>abcdefg</bar>"

「abcdefg」のすべてのインスタンスを次のような配列に分割したいと思います。

["<foo>abcdefg</bar>", "<foo>abcdefg</bar>", "<foo>abcdefg</bar>", "<foo>abcdefg</bar>"];

私は試してみます:

var str="<foo>abcdefg</bar><foo>abcdefg</bar><foo>abcdefg</bar><foo>abcdefg</bar>";
var Array_Of_FooBars = str.split("</bar>"); 

alert(Array_Of_FooBars);

しかし、それは戻ります:

["<foo>abcdefg", "<foo>abcdefg", "<foo>abcdefg", "<foo>abcdefg",]

セパレータ''を削除しています。私はそれを望んでいません。

分割を使用して、文字列からセパレータを失わないようにするにはどうすればよいですか?

ありがとう。ケン

4

4 に答える 4

12

これを試して。これは完全な解決策ではありませんが、ほとんどの場合はうまくいくはずです。

str.split(/(?=<foo>)/)

つまり、各開始タグの前の位置で分割します。

編集:次match()のように、で行うこともできます:

str.match(/<foo>.*?<\/bar>/g)
于 2012-10-04T07:03:01.893 に答える
2

おそらく match を使用したいと思われるでしょう:

var s = "<foo>abcd1efg</bar><foo>abc2defg</bar><foo>abc3defg</bar><foo>abc4defg</bar>"
s.match(/(<foo>.+?<\/bar>)/g)
// =>["<foo>abcd1efg</bar>", "<foo>abc2defg</bar>", "<foo>abc3defg</bar>", "<foo>abc4defg</bar>"]
于 2012-10-04T07:06:41.720 に答える
1

単純な正規表現を繰り返し処理して、そのように配列を構築できます。

var x = new RegExp('<foo>(.*?)</bar>', 'ig'),
s = "<foo>abcdefg</bar><foo>abcdefg</bar><foo>abcdefg</bar><foo>abcdefg</bar>",
matches = [];

while (i = x.exec(s)) {
    matches.push(i[0]);
}

String.match()を使用する方が良いことに気づきました。このコードは、タグ内のコンテンツを照合するのにより便利です。

于 2012-10-04T07:05:28.127 に答える
0

正の先読みを使用して、正規表現が特殊文字が存在することを主張するが、実際には一致しないようにします。

string.split(/<br \/>(?=&#?[a-zA-Z0-9]+;)/g);
于 2012-10-04T06:59:46.547 に答える