2

jQuery で正規表現を使用しようとしていますが、いくつかの問題が発生しています。これは私が操作している文字列です:

NSLog(@"It works!");

正規表現で @" と " の間のすべてを選択する必要があります。この正規表現は Reggy では問題なく機能しますが、私の JavaScript に入れると機能しません。

@".*"

私のjQueryコードは、このセクションでは次のとおりです(おそらく単一引用符が問題ですか?):

var regex='@".*"';
$(".syntaxhighlight").highlight(regex,'string');

これは問題なく機能するため、問題は highlight() 関数ではないことを私は知っています:

$(".syntaxhighlight").highlight('nil','string');

では、この正規表現を適切に機能させるにはどうすればよいでしょうか?

4

2 に答える 2

3

このhighlight()機能はString.indexOf()、正規表現オブジェクトをサポートしない内部的に使用します。

ただし、次のように書き換えることができます。

$.fn.extend({
 highlight: function(pat) {
  function innerHighlight(node, pat) {
   var skip = 0;
   if (node.nodeType == 3) {
    var res;

    while (res = pat.exec(node.data)) {
     var spannode = document.createElement('span');
     spannode.className = 'highlight';
     var middlebit = node.splitText(res.index);
     var endbit = middlebit.splitText(res[0].length);
     var middleclone = middlebit.cloneNode(true);
     spannode.appendChild(middleclone);
     middlebit.parentNode.replaceChild(spannode, middlebit);
     skip = 1;
    }
   }
   else if (node.nodeType == 1 && node.childNodes && !/(script|style)/i.test(node.tagName)) {
    for (var i = 0; i < node.childNodes.length; ++i) {
     i += innerHighlight(node.childNodes[i], pat);
    }
   }
   return skip;
  }
  return this.length && pat ? this.each(function() {
   innerHighlight(this, pat);
  }) : this;
}
});
于 2012-11-14T02:49:09.150 に答える
3

はい。正規表現は、JavaScript で次のように定義されます。

/Your Expression/flags

あなたの場合:

var regex = /@".*?"/;
于 2012-11-14T02:16:45.543 に答える