2

我正在尝试在 jQuery 中使用正则表达式,但遇到了一些问题。这是我正在操作的字符串:

NSLog(@"It works!");

我希望正则表达式选择 @" 和 " 之间的所有内容,包括在内。这个正则表达式在 Reggy 中工作得很好,但是当放在我的 JavaScript 中时,它不起作用:

@".*"

我的 jQuery 代码在本节中如下(可能是单引号问题吗?):

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

我知道问题不在于 highlight() 函数,因为它工作得很好:

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

那么,如何让这个正则表达式正常工作?

4

2 回答 2

3

是的。正则表达式以这种方式在 javascript 中定义:

/Your Expression/flags

在你的情况下:

var regex = /@".*?"/;
于 2012-11-14T02:16:45.543 回答
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 回答