2012-03-25 30 views
0

我在正則表達式中遇到了一些麻煩。使用.match和正則表達式不起作用獲取特定單詞

我想匹配句子中的正則表達式。

例子:

John has two candy ::123:: 

,我使用此代碼來尋找它:

var getid = x$('div').html().match(/::([^:]+)::/g); 

要獲得123句我們。

那麼我的問題在這裏? 我一直在爲getid var獲取未定義的值。

+0

是啊x $是別名。但它的價值不明確。 – sm21guy 2012-03-25 13:11:04

+0

你在頁面中只有div嗎?通過id訪問元素可能是一個好主意。 – 2012-03-25 13:12:10

+0

我正在使用(this).html();因爲它上面是div ID。點擊功能。 – sm21guy 2012-03-25 13:13:56

回答

0

問題是g標誌。您不要將它與String#match一起使用。刪除它,它工作正常(live copy | source):

var getid = x$('div').html().match(/::([^:]+)::/); 
if (getid) { 
    display("Found: " + getid[1]); 
} 
else { 
    display("Not found"); 
} 

如果你想找到所有匹配的文本,使用RegExp#exec和環(和g標誌)(live copy | source):

var rex = /::([^:]+)::/g; 
var str = x$('div').html(); 
var getid; 
while (getid = rex.exec(str)) { 
    display("Found: " + getid[1]); 
} 

(爲了更清楚,你可以使用

while ((getid = rex.exec(str)) != null) { 

...因爲在TE具有分配st看起來像=而不是==錯字;但它涉及到比其他可讀性同樣的事情。)


回覆您的評論如下詢問x$(this),它應該有任何區別。以上是返回使用的上述示例:x$(this)

+0

嗨,我刪除了g標誌,它仍然得到一個未定義的值。我正在使用$(this),是好的還是會影響.match? – sm21guy 2012-03-25 13:20:31

+0

@ sm21guy:'x $(this)'獲取元素不會有任何區別(假設'this'是一個包含文本的元素),那麼代碼中就必然存在其他問題。將它與上面的工作示例進行比較,您應該能夠找到它。我已經使用'x $(this)'添加了示例。 – 2012-03-25 13:28:47

+0

謝謝我正在尋找其他問題。 – sm21guy 2012-03-25 13:32:16