1

特定の文字グループ内にない場合にのみ、特定の文字列の絵文字を画像タグに置き換えようとしています。

与えられた:

var reg = /(?!<):\/(?![^<>]*>)/g,
    string = ':/ <a href="http://blah.com">http://blah.com</a> :/',
    result = string.replace(reg, 'IMG');

結果:IMG <a href="http://blah.com">httpIMG/blah.com</a> IMG

内だけでなく、HTMLタグ内の置換を無視する方法があるかどうか知りたいです<>

4

3 に答える 3

1

これは最善の解決策ではないかもしれませんが、jQuery を使用する場合は、次の「ワンライナー」で作業できます。

var str = ":/ <a href='http://blah.com'>http://blah.com</a> :/";

$("<div />", { html : str }).contents().each(function() {
    if (this.nodeType === 3)
        this.nodeValue = this.nodeValue.replace(/:\//g, "IMG");
}).end().html();

デモ: http://jsfiddle.net/Hfnje/

于 2013-01-15T00:08:59.347 に答える
0

単語の境界と一致させてみませんか?

/\B:\/\B/

一致するもの:
:/
foo :/ bar

ただし、
http://
foo:/barではありません。

于 2013-01-14T23:55:05.227 に答える
0

@VisioN の助けを借りて、私はこれを思い付くことができました:

message =
  $('<div />', html: message).contents().each(->
    if @nodeType is 3
      for replacement, emoticons of self.emoticons
        for emoticon in emoticons
          @nodeValue = @nodeValue.replace new RegExp(emoticon, 'g'),
            $('<span />', class:'emoticon ' + replacement, title: emoticon)[0].outerHTML

      $(@).replaceWith @nodeValue
  ).end().html()

きれいではありませんが、機能しています。

于 2013-01-15T02:09:45.977 に答える