2013-10-04 119 views
0

我不擅長用正則表達式只得到整數的話,所以我需要你的幫助使用正則表達式

在這下面輸入我需要用正則表達式只得到整數過去支架從name屬性

<input type="text" class="redux-datepicker group hasDatepicker" value="" name="redux_demo[17d][2]" id="g-date" data-id="g"> 

下面的代碼將返回17,我需要2中的最後括號[]

var slideCount = jQuery(newSlide).find('input[type="text"]').attr("name").match(/\d+/); 
+1

你真的需要一個正則表達式嗎? - >'slideCount.split('[')。pop()。replace(']','')'... http://jsfiddle.net/bkKfZ/ – adeneo

回答

-2

要匹配的最後一次出現,你需要使用負前瞻。您正在尋找的表達式是\d+(?!.*\d+)這意味着:只要在字符串上沒有其他數字序列,就匹配一個或多個數字的序列。

就你的情況而言,這意味着正則表達式將跳過17,因爲它後面至少有一個其他數字,但會匹配2,因爲它是字符串上的最後一個數字。

+0

或者你可能只是想檢查與$元字符,這是更簡單的字符串的結尾 – Tyron

+0

是的,那裏有很多選擇。我選擇了最簡單的正則表達式,它沒有包含括號,因爲我還需要滿足像[17d] [2c]這樣的事情的機會,使得正則表達式有點難以遵循(@ Karl-André's解決方案不包括,而樣本數據表明它可能發生)。這個想法是提供一個有用的基礎@Masteryo可以建立在哪裏。 – gonchuki

+0

在'[17d] [2c]'的情況下,不匹配'c'是沒有意義的,因爲這些都是數組索引,所以你必須調整正則表達式。 – Tyron

0

嘗試此正則表達式:

.attr("name").replace(/\[(\d+)\]$/, '$1'); 

通知我改變.match.replace

0

,你所要做的就是調整你的正則表達式匹配「(左括號),然後(數字),那麼(閉架),然後(字符串的結束)」 ,這是用這樣的正則表達式完成的:/ [\ d +] $/

但是由於方括號在正則表達式中有特殊含義,所以你必須用「\」來轉義它們。此外,您只需要捕獲號碼本身,而不是括號,因此您可以在號碼周圍添加圓括號。

這導致在正則表達式/ \ [(\ d +)\] $/

整條生產線:

var slideCount = jQuery(newSlide).find('input[type="text"]').attr("name").match(/\[(\d+)\]$/)[1]; 
+0

我試過你的代碼但沒有工作 $(...)。find(...)。attr(...)。match(...)爲null – Masteryo

+0

我不知道你的newSlide變量設置爲什麼,但我的例子小提琴的作品: http://jsfiddle.net/ZrBG4/1/ – Tyron

+0

也許你忘了附加[1] – Tyron