2010-04-19 183 views
1

任何幫助?當我運行此我得到「無效量詞?< = HREF =」正則表達式失敗

var aHrefMatch = new RegExp("(?<=href\=")[^]+?(?=")"); 
var matchedLink = mystring.match(aHrefMatch); 

但我知道正則表達式是有效的。

任何想法?

回答

9

的Javascript不支持lookbehind斷言。它只支持lookahead的。產生錯誤是因爲它假定?是0或1的量詞,但在子模式開始時沒有要量化的元素(由(左括號開始)

此外,您的字符串似乎缺少一些反斜槓,因爲雙引號是沒有逃過那裏。它應該會產生一個語法錯誤。

也許這段代碼可以幫助你做你想達到什麼目的:

var match = mystring.match(/href=\"([^\"]*)\"/); 
var matchedLink = match[1]; 
+0

+1是指出的唯一答案* both *問題:lookbehinds和未轉義的引號。 – 2010-04-19 14:17:39

+0

是的,剛剛讀過另一篇文章,指出js不支持lookbehind斷言。謝謝! – mindwire22 2010-04-19 19:23:47

1

你一定要逃逸正則表達式的雙引號與標準反斜槓:

var aHrefMatch = new RegExp("(?<=href\=\")[^]+?(?=\")"); 

...或者你可以只用單引號指定的字符串:

var aHrefMatch = new RegExp('(?<=href\=")[^]+?(?=")'); 
1

您是不是要找等號(=)後,並提前看後逃跑報價=? 此外,如果你只是想匹配href =「一些文本」,那麼你真的不需要看後面的結構。以下應該做的很好:

href=\"[^"]+\" 

如果您正在嘗試匹配其他內容,請詳細說明。謝謝

0

不知道你想做什麼。但是如果你想獲得鏈接。

var aHrefMatch = new RegExp(/(href\=\")([\w\-\/]+)?(\")/); 
var matchedLink = mystring.match(aHrefMatch)[2]; 
+0

是的,我需要獲取字符串中錨元素的href。 Fredrik你的代碼似乎最接近,但當我運行它時,我得到: - 非法字符 var aHrefMatch = new RegExp(href = \「[^」] + \「); \ n – mindwire22 2010-04-19 08:54:35

+0

確保您刪除所有空格,聲音像一些非法字符使它成爲你複製/粘貼的原因 如果不是請粘貼什麼mystring看起來像 – fredrik 2010-04-19 10:43:48

+0

RegExp構造函數接受一個字符串作爲它的第一個參數@ Meander365,在開始處改變'/'結束於'''。或者像@Rithiur建議的那樣使用正則表達式。 – 2010-04-19 14:16:22