我需要这个字符串<a class=BC_ANCHOR href="http://www.msn.com" onClick=something target=_blank>MSN</a>
地带变成<a href="http://www.msn.com">MSN</a>
- 然而这正则表达式\s+\w+[^href]=\S*\w?
在闭幕式>
不会停止,而是跑到</a>
结束 - 有人可以帮助我得到这个正则表达式停止在关闭>
?正则表达式剥离HTML标签内容有条件
谢谢!
我需要这个字符串<a class=BC_ANCHOR href="http://www.msn.com" onClick=something target=_blank>MSN</a>
地带变成<a href="http://www.msn.com">MSN</a>
- 然而这正则表达式\s+\w+[^href]=\S*\w?
在闭幕式>
不会停止,而是跑到</a>
结束 - 有人可以帮助我得到这个正则表达式停止在关闭>
?正则表达式剥离HTML标签内容有条件
谢谢!
通过将\w+[^href]
你仍然允许之类的东西<a href ="...
,可以排除h
,r
,e
,或f
结束标记(即不一定href
)。
尝试
\s+(?!href)[a-zA-Z+]+ *= *(?:"[^"]+"|\w+)
说明:(?!href)
是负先行并防止标签被href
。
[a-zA-Z]+
是你的标签。 '='前后有空格。我限于字母,因为我很确定属性名称不能包含数字或下划线(其中\w
将允许)。
(?:"[^"]+"|\w+)
表示标记的值可以是双引号内的任何内容,也可以是未引用的一组\w+
。
这些都阻止匹配超出>
,除非您的正则表达式格式错误并且您有(例如)<a name="asdf>
(注意缺失的结束"
)。
很好的解释。我会投两次如果我可以:) – 2012-03-02 02:13:37
这是工作真棒 - 除了我刚刚发现的一个场景。有一个链接看起来像'MSN',出于某种原因'(事件)'没有得到匹配。我试着将'\ w +'改成'。*',但是选择了所有的东西。正则表达式,你为什么恨我? – 2012-03-02 02:20:04
正则表达式不恨你,你只需要学习贪婪和非贪婪。 '。*'尽可能匹配(所以会一直到最后一个'>')。为了使这种非贪婪,即尽可能匹配*小*,请尝试'。*?'。或者,您可以执行'[\ w()] +'来允许'\ w'和括号。 (请记住,'\ w'是'[a-zA-Z0-9_]'(粗略地说,不确定区域设置和重音字母)。 – 2012-03-02 02:41:59
如果你真的想使用正则表达式,我的建议是反过来做。将href和链接文本解压缩到组,然后再次生成标记。
href="([^"]+)"[^>]*>([^<]+)<\/a>
有人提到使用DOM获取值,我也同意如果你使用JS是最好的选择。
由于某种原因,Regex选择了整个字符串 - 当我需要做的是将所有'A'标签除了'href'并且呈现该字符串。 – 2012-03-02 02:08:12
不要试图使用正则表达式来消毒HTML。安全后果较差的方式可能会导致错误发生。
您的问题可能存在DOM解决方案,如果没有,那么有些库已经由编写解析器为生的人进行了全面测试和审查。
无耻插头:http://code.google.com/p/google-caja/wiki/JsHtmlSanitizer
你处理HTML或DOM元素?
更容易处理元素。如果你想要的元素只具有href属性,那么为什么不喜欢:
function fixLink(el) {
var newLink = document.createElement('a');
newLink.href = el.href;
newLink.appendChild(document.createTextNode(el.textContent || el.innerText));
el.parentNode.replaceChild(newLink, el);
}
即使你正在处理HTML,你可以将其插入一个新的元素(比如一个div),做以上,然后获取剩余的innerHTML。
我想探讨一下,我解析了评论栏的链接,评论最初是以HTML格式显示给用户的,但是当用户想要编辑评论时,我需要将其转换去文字并去掉一些装饰我添加特定于应用程序。考虑到这一点,有没有更好的方式来与DOM做到这一点呢? – 2012-03-02 18:41:32
该正则表达式在许多方面看起来不正确,例如'[^ href]'意思是“匹配除了h,r,e或f之外的任何其他任何东西的_single_字符”。代码将运行的上下文是什么? (因为如果你正在提取网页上的元素,那么有更多的方法去解决它。) – nnnnnn 2012-03-02 02:04:36
'[^ href]'表示除了'h','r','e'或'f'之外的任何字符。它并不意味着不是'href'。这可能会像'((?!href \ b)[az] +)' – 2012-03-02 02:07:59
您可能需要[更漂亮的模式](http://stackoverflow.com/questions/4231382/regular-expression-pattern-not -matching任何地方,在串/ 4234491#4234491)。 – tchrist 2012-03-02 02:12:10