0

:)の出現を周囲のテキストから分離するために、Javascript で正規表現を作成しようとしています。

以下を考えると:

:)これはテキストの行です:)いくつかのスマイリーが含まれています:)。では、:):)

結果の8つのグループを取得したいと思います:

  1. :)
  2. これはテキスト行です
  3. :)
  4. その中にいくつかのスマイリー
  5. :)
  6. . そこで、
  7. :)
  8. :)

現時点では([^:)]+)、スマイリーなしで周囲のテキストのみをグループ化するを使用しています。スマイリーもグループ化するには、どのような調整を行うことができますか?

4

4 に答える 4

2

スプリット:

var string = "Given the following: :)This is a line of text :) with several smileys in it :). So there.,:):)";
var groups = string.split(/:\)/);

これは、各要素がテキストの一部である配列を返します:)

テキストは各 で分割されているため、テキストの各部分の間:)に を追加することで、必要な結果を構築できます。:)

var parts = [groups[0]];
for (var i = 1; i < groups.length; ++i) {
    parts.push(':)');
    parts.push(groups[i]);
}

結果は次のとおりです。

  1. :)
  2. これはテキスト行です
  3. :)
  4. その中にいくつかのスマイリー
  5. :)
  6. . そこで、
  7. :)
  8. :)

ここでこれを試してください:http://jsfiddle.net/Gxr6U/3/


スマイリーを画像に置き換えたい場合は、次のようにします。

var frags = document.createDocumentFragment();

frags.appendChild(document.createTextNode(groups[0]));

for (var i = 1; i < groups.length; ++i) {

    var img = document.createElement('img');
    img.src='http://../smiley.png';

    frags.push(img);

    frags.appendChild(document.createTextNode(groups[i]));
}

スマイリーだけを削除したい場合:

var text = groups.join('');
于 2012-07-08T16:34:23.200 に答える
2

私はお勧めします:

var str = ":)This is a line of text :) with several smileys in it :). So there.,:):)",
    matches = str.split(/(\:\))/);
console.log(matches);​

JS フィドルのデモ

上記から空の一致を削除するフィルタリングを追加しました。

var str = ":)This is a line of text :) with several smileys in it :). So there.,:):)",
    matches = str.split(/(\:\))/),
    matched = [];
for (var i = 0, len = matches.length; i < len; i++) {
    if (matches[i].length) {
        matched.push(matches[i]);
    }
}
console.log(matched);​

JS フィドルのデモ

実際の画面上の出力を含むさらに別のバージョン:

var str = ":)This is a line of text :) with several smileys in it :). So there.,:):)",
    matches = str.split(/(\:\))/),
    matched = [], li,
    list = document.createElement('ol');
document.body.appendChild(list);
for (var i = 0, len = matches.length; i < len; i++) {
    if (matches[i].length) {
        matched.push(matches[i]);
        li = document.createElement('li');
        txt = document.createTextNode(matches[i]);
        li.appendChild(txt);
        list.appendChild(li);
    }
}
console.log(matched);​

JS フィドルのデモ

于 2012-07-08T16:35:49.987 に答える
0

以下は、あなたが言及した文字列を必要に応じて正常にグループ化します。

your_match = your_string.match(/(:\)|[^:)]*)/g)

:ただし、元の RegExp のように、または)がスマイリーに含まれていない場合、問題が発生します。スマイリー内にない場合、これらの文字は一致グループから消えます。

于 2012-07-08T16:34:55.980 に答える
0

次のパターンを使用できます。

/:\)|(?:[^:]+|:(?!\)))+/g

これは、 またはまたは または a の後に a が続かない:)任意の文字に一致します。::)

于 2012-07-08T16:43:46.070 に答える