2011-10-10 52 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)部分。)