字符串过长时Regex匹配不起作用
Regex match not working when string is too long?
我有以下字符串:
var example = '{%start%}$MOXDATA${"name":"group one","sections":[{"name":"section one","fields":[{"name":"plain one","type":"plain","value":"// some '"plain'" '''"'"'"'''' '''' '' '' '" '" '" tesP(&^%I&63657riu43r3+_)(I)p;l>:'"></}}{|'":1~~``"},{"name":"rich one","type":"rich","value":"<ul>'n<li><span style='"font-size: 11px;'">{ Lo<span style='"font-family: ''comic sans ms'', sans-serif;'">rem</span> ipsu<span style='"color: #ffff00; background-color: #339966;'">m dolor si</span>t amet, consec<strong>tetur adi</strong>piscing elit. Vestibulum ac dolor pulvinar ipsum luctus ullamcorper.</span></li>'n<li></li>'n<li><a href='"http://retrgfd.com/resrgf'">erwfd'"etrgfdd''''refre'"'''"refrds'''"'"'"sdgfd</a></li>'n</ul>"},{"name":"repeater one","type":"repeater","value":[[{"name":"plain one","type":"plain","value":"some test value"},{"name":"rich one","type":"rich","value":"some test value"},{"name":"link one","type":"link","value":"some test value"},{"name":"media one","type":"media","value":"some test value"},{"name":"link two","type":"link","value":"some test value"}]]}]},{"name":"section two","fields":[{"name":"link one","type":"link","value":"<a href='"http://www.yyyy.com'">take me to your leader</a>"}]}]}$MOXDATA${%end%}';
我在做example.match(/{%start%}'$MOXDATA'$(.+)'$MOXDATA'${%end%}/);
,它返回null
。
然而,如果我使用上面字符串的一个明显更短的版本,如:
var shorter = '{%start%}$MOXDATA${"name""}]}]}$MOXDATA${%end%}';
shorter.match(/{%start%}'$MOXDATA'$(.+)'$MOXDATA'${%end%}/);
则CCD_ 3被正确地匹配。
为什么?我做错了什么?
Anony Mousse的回答很好,stribizhev的评论也很好。
然而,当你必须处理一个长字符串时,你应该使用一些能减少回溯的东西([^]*
或['s'S]*
会将所有字符与换行符匹配,直到字符串结束,正则表达式引擎必须逐字符返回,直到找到$MOXDATA${%end%}
。这是一项艰巨的工作。)
为了避免这种工作,您可以将[^]*
或['s'S]*
替换为:[^$]*(?:'$+(?!MOXDATA'${%end%})[^$]*)*
或更健壮(如果$MOXDATA${%end%}
不存在):(?=([^$]*))'1(?=((?:'$+(?!MOXDATA'${%end%})[^$]*)*))'2
((?=(subpattern))'1
模拟原子团。)
以这种方式,子模式MOXDATA'${%end%}
仅在每个$
上进行测试。
默认情况下,.*
将不匹配换行。
尝试[^]*
来真正匹配任何字符。
相关文章:
- JavaScript Regex(?i)选项中字符串大小写不敏感的部分不起作用
- mysql时间戳格式的Javascript regex不起作用
- 为什么javascript替换方法(没有regex)在angularjs表达式中不起作用来删除 
- Regex选择不起作用
- Html.TextBoxFor regex 不起作用
- Javascript Regex replace在IE10中不起作用
- Regex表达式不起作用
- 为什么这个简单的JavaScript密码regex不起作用
- regex手机验证不起作用-javascript
- Nodejs的Regex全局匹配不起作用
- Regex验证(RegularExpressionValidator和Javascript)不起作用
- regex分割在Javascript中不起作用的数字和非数字组
- 字符串过长时Regex匹配不起作用
- RegEx在Javascript中不起作用:SCRIPT5018:意外的限定符
- RegEx完全匹配^abc$dons'不起作用
- JQuery验证Regex规则不起作用
- JavaScript RegEx字符串结尾不起作用
- 具有负面前瞻性的Regex不起作用
- String.replace()不起作用,即使在其他语言中使用相同的regex
- Regex Javascript.为什么我的花括号不起作用