问题是酱紫的:
/<(\/\s*)?((\w+:)?\w+)(\w+(\s*=\s*((["'])(\\["'tbnr]|[^\7])*?\7|\w+)|.{0})|\s)*?(\/\s*)?>/.test("Ask God to help <look at the issue of a large regular expression help! help! help!")
直接运行代码,发现执行效率异常的慢,浏览器直接卡死,任务管理器查看发现一直在占用内存。这个正则表达式的作用是检测文本中是否含有html标签,现在是测试一个正常输入一个小于号的情况,悲剧了
@"<(!|/)?\w+( ((.|\n)*?"")?)? *>"
<abc> 这种算不算?
算的 就是<>不能成对的出现
@咖啡+:
<([^<]*?)>(.*?)</\1>
@Yu:
$(document).ready( function() { var r=/<([^<]*?)>(.*?)<\/\1>/.test("Ask God to help <look>help! help!</look>"); alert(r); });
@Yu: 这样不够的 这个正则表达式主要的作用就是过滤用户输入html标签,防止注入
/<([^<]*?)>(.*?)<\/\1>/.test("Ask God to help <span class='title'>help! help!</span>") 这样的过了
@咖啡+:
<([^<]*?)(\s+[^<]*)?>(.*?)<\/\1>
/<(\w*).*>.*<\/\1>/.test("Ask God to help <span class='title'>help! help!</span>")
/<(\w*).*>.*<\/\1>/.test("Ask God to help span<img> class='title' help! help!") 这种情况也不能让用户输入
@咖啡+: /<.*?>/.test("Ask God to help span<img> class='title' help! help!")
正则表达式 | <(\S*?) [^>]*>.*?</\1>|<.*? /> |
---|---|
匹配 | <html>hello</html>|<a>abcd</a> |
不匹配 | abc|123|<html>ddd |
正则表达式 | ^[^<>`~!/@\#}$%:;)(_^{&*=|'+]+$ |
---|---|
匹配 | This is a test |
不匹配 | <href = | <br> | That's it |
正则表达式 | <!--.*?--> |
---|---|
匹配 | <!-- <h1>this text has been removed</h1> --> | <!-- yada --> |
不匹配 | <h1>this text has not been removed</h1> |
正则表达式 | (\[(\w+)\s*(([\w]*)=('|")?([a-zA-Z0-9|:|\/|=|-|.|\?|&]*)(\5)?)*\])([a-zA-Z0-9|:|\/|=|-|.|\?|&|\s]+)(\[\/\2\]) |
---|---|
匹配 | [link url="http://www.domain.com/file.extension?getvar=value&secondvar=value"]Link[/li |
不匹配 | [a]whatever[/b] | [a var1=something var2=somethingelse]whatever[/a] | [a]whatever[a] |
正则表达式 | href=[\"\'](http:\/\/|\.\/|\/)?\w+(\.\w+)*(\/\w+(\.\w+)?)*(\/|\?\w*=\w*(&\w*=\w*)*)?[\"\'] |
---|---|
匹配 | href="www.yahoo.com" | href="http://localhost/blah/" | href="eek" |
不匹配 | href="" | href=eek | href="bad example" |
正则表达式 | "([^"](?:\\.|[^\\"]*)*)" |
---|---|
匹配 | "This is a \"string\"." |
不匹配 | "This is a \"string\". |
正则表达式 | (?i:on(blur|c(hange|lick)|dblclick|focus|keypress|(key|mouse)(down|up)|(un)?load|mouse(move|o(ut|ver))|reset|s(elect|ubmit))) | ||
---|---|---|---|
匹配 |
|
||
不匹配 | click | onandon | mickeymouse |
正则表达式 | (?s)/\*.*\*/ |
---|---|
匹配 | /* .................... */ | /* imagine lots of lines here */ |
不匹配 | */ malformed opening tag */ | /* malformed closing tag /* |
正则表达式 | <(\S*?) [^>]*>.*?</\1>|<.*? /> |
---|---|
匹配 | <html>hello</html>|<a>abcd</a> |
不匹配 | abc|123|<html>ddd |
正则表达式 | \xA9 |
---|---|
匹配 | © |
不匹配 | anything |
正则表达式 | src[^>]*[^/].(?:jpg|bmp|gif)(?:\"|\') |
---|---|
匹配 | src="../images/image.jpg" | src="http://domain.com/images/image.jpg" | src='d:\w |
不匹配 | src="../images/image.tif" | src="cid:value" |
正则表达式 | /\*[\d\D]*?\*/ |
---|---|
匹配 | /* my comment */ | /* my multiline comment */ | /* my nested comment */ |
不匹配 | */ anything here /* | anything between 2 seperate comments | \* *\ |
正则表达式 | <[a-zA-Z]+(\s+[a-zA-Z]+\s*=\s*("([^"]*)"|'([^']*)'))*\s*/> |
---|---|
匹配 | <img src="test.gif"/> |
不匹配 | <img src="test.gif"> | <img src="test.gif"a/> |
个人觉得放在服务端验证更好做吧。
@Mr.Brian: 服务端的验证做的比前端弱,这个是个坑
@咖啡+: 奥,那你试试前面那几个有没有适合你的,这东西比较费事,是细节性东西。静下心来自己多尝试尝试!不要太着急!
@Mr.Brian:谢谢! 其实回到我提出的这个问题的初衷上来,我给出的这个正则表达式是可以满足要求的,但是就是碰到字符串超过100个左右的情况下,效率的显得特别慢,会直接把浏览器卡死,所以能帮我直接分析一下上面正则表达式的性能是最好的。