2011-10-10 38 views
2

我有這樣一段代碼:快速之一:此RegEx出了什麼問題?

_regex = /((?<!placeholder)\w+(?:\s*=\s*(?:"[^"]*"|'[^']*')))/;  
imgTag = imgTag.replaceAll(_regex, ' '); 

也試過這個,而不是

imgTag = imgTag.replace(new RegExp(/((?<!placeholder)\w+(?:\s*=\s*(?:"[^"]*"|'[^']*')))/, "gi"), ' '); 

但我的代碼永遠不會被傳遞行:

_regex = /((?<!placeholder)\w+(?:\s*=\s*(?:"[^"]*"|'[^']*')))/;  

或者This line:

imgTag = imgTag.replace(new RegExp(/((?<!placeholder)\w+(?:\s*=\s*(?:"[^"]*"|'[^']*')))/, "gi"), ' '); 

所以問題出在我的RegEx中,對吧?

我看不到它,誰能請一個燈?

謝謝!

+0

可能重複的[RegEx匹配開放標記,但XHTML自包含標記](http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml- self-contained-tags) – Amber

+0

您對RegExp的使用是完全錯誤的,但是,您的正則表達式不正確:'SyntaxError'。 JavaScript不知道向後看'?<!'。 –

+0

可能。這是我第一次與RegExes進行更多聯繫。我使用O'Reilly的正則表達式食譜來挑選一些東西,但對於這些人肯定還有很多東西需要了解。你會說什麼是關於RegEx的「完全錯誤」?並感謝關於隱藏提示! –

回答

2

Javascript不支持lookbehinds。你不能這樣寫:

(?<!placeholder) 

使用,而不是一個前瞻:

((?!placeholder).{11}|^.{0,10}) 

你需要太多調整替換字符串,因爲這只是你想要什麼開始前多餘的字符相匹配取代。


而且這是行不通的:這不是var regex = new Regexp(/.../, "gi");

寫:var regex = /.../gi;

+0

謝謝,那確實是我的問題!而關於'new Regexp(/.../)'代碼,這是因爲我想要'gi'標誌,或者有另一種方法可以通過'replace'函數來實現呢?再次感謝! –

+0

@BeOliveira:如果您使用'RegExp',則必須使用字符串。見https://developer.mozilla.org/en/JavaScript/Guide/Regular_Expressions –

+0

@ FelixKling:再次感謝!儘管如此,我真的很喜歡RegEx,仍然試圖獲得普遍的理解。我使用了'regexp = /((??placeholder)\ w +(?:\ s * = \ s *(?:「[^'] *'|'[^'] *')))/ gi;'它的工作,但現在我知道如何做與'RegExp'一樣。感謝指針! –

2

JavaScript不支持向後看模式。 (這是(?< pattern)部分。)