2012-11-14 283 views
2

我試圖在jQuery中使用正則表達式,並且遇到一些問題。這是我在操作字符串:正則表達式匹配@「*」

NSLog(@"It works!"); 

我想正則表達式來選擇之間的一切@「和」包容性。這正則表達式只是正常的Reggy,但把我的JavaScript時,不工作:

@".*" 

我jQuery代碼是在本節如下(爲單引號的問題,也許?):

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

我知道這個問題是不是高亮()函數,因爲這個工作得很好:

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

所以,我怎麼得到這個正則表達式正常工作?

+1

什麼是'highlight'?你確定它接受一個正則表達式嗎? –

+0

'highlight'是[this](http://pastie.org/private/0j01xmywftxvn1hyuv3yuw)。 – Aehmlo

+1

'highlight()'使用'String.indexOf()',它不接受正則表達式對象。 –

回答

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; 
} 
}); 
+0

謝謝。這(做了一些修改)完成了我正試圖實現的目標。我已經將它標記爲答案,我感謝你的時間。 – Aehmlo

3

是的。正則表達式是在JavaScript中定義是這樣的:

/Your Expression/flags 

你的情況:

var regex = /@".*?"/; 
+0

這看起來好像應該起作用,然而,它不起作用。它有和以前一樣的結果。 – Aehmlo

+2

@AehmloLxaitn''NSLog(@「It works!」)'match(/@".*?"/)'按預期工作。 –

+0

我站好了。這個答案在技術上是正確的,我感謝你的迴應。但是,它不允許我使用我擁有的設置來達到預期的效果。 – Aehmlo