2013-06-28 32 views
0
1. <a class="click" data-test="CodeMirror-sizer('@aaa', 1)-er"> 
    2. <a class="click" data-test="CodeMirror-sizer44('@bbb', 2)-fgd"> 
    3. <a class="click" data-test="CodeMirror-sizer366('@ccc', 2)-gr4f"> 
    4. <a class="click" data-test="CodeMirror-sizer33('@ddd', 1)-erw"> 

$(".click").click(function(){ 
    var text = ???; 
    alert(text); 
}) 

如何從例如正則表達式的屬性中獲取文本? 我會收到:如何從例如正則表達式的屬性中獲取文本?

從1 = @aaa

從2 = @bbb

從3 = @ccc

從4 = @ddd

LIVE jsFIDDLE

+0

編碼數據屬性作爲JSON和jQuery將解析JSON你 –

+3

我不不想聽起來像個瘋子或者其他什麼人,但爲什麼不把這個價值放到它自己的數據項中呢? – mcgrailm

回答

4

您可以分開單引號字符並取第二個返回值:

$(".click").click(function(){ 
    var text = $(this).data('test').split("'")[1]; 
    alert(text); 
}); 

Working Demo

+1

這似乎有點脆弱,但提問者的專有數據格式 –

+0

@JanDvorak誠然,正則表達式可能會遭受同樣的問題,並可能增加一些複雜性。我不知道這兩種方法是否都會更好,這是一個品味的問題,真的如此 – cfs

+0

你可以通過'.split(「'」)來減少它的脆弱性。slice(1,-1).join(「' 「);',因爲我們知道屬性中只有一個_JavaScript_字符串。 –

0

方式一:

var text = $(this).data("test"); 
alert (text.match(/^.*\('(.*)\s*'/)[1]); 
+0

'^。*'的目的是什麼?是否儘可能向右移動捕捉? –

+0

@JanDvorak它不使用'?',所以它必須利用這個事實,貪婪會一路走回頭路。 –

+0

@PaulS。由於整個匹配字符串中只有兩個撇號,因此返回最左邊還是最右邊的匹配並不重要。這就是我問的原因。 –

2
$(".click").click(function(){ 
    var pattern = /@[a-z]{3}/i 
    var text = $(this).attr('data-test') 

    alert(text.match(pattern)); 
}) 

在這裏看到的小提琴:http://jsfiddle.net/Xr7bw/4/

但是這一切都依賴於模式,這其中只是相匹配,並且「 @「後面有三個字符,範圍[az] ......如果你可以更精確一些有什麼可能的值是,我們可以更加precies與捕捉他們

+0

'/ @ \ w + /'好像是一個合理的猜測,太 –

+0

真的,在這種情況下提及http://www.w3schools.com/jsref/jsref_obj_regexp.asp作爲參考,可以在regEx中進行什麼操作幫助提問者! –

+0

絕對不是。 W3schools是一個可怕的資源。選另一個。 –

相關問題