我最近了解到,通过将length
/ count
移到循环外可以大大提高for循环的性能,并认为我会考虑在整个站点中实现这一点。
使用for\(.*<.*\.length
进行完整的正则表达式搜索显示,在搜索的12,000个文件中的70个中,我有大约600个匹配项,而当我浏览时,我意识到我只是一遍又一遍地剪切粘贴,几乎没有变化我只是复制计算长度的原始代码,删除点并大写第一个字符。
例如:for(c=a.children.length-1;0<=c;c--)d
将成为
var AChildrenLength=a.children.length;
for(c=AChildrenLength-1;0<=c;c--)d
一旦我意识到自己的工作是单调的,似乎该花些时间了,可以将正则表达式变成一个可以修改正则或缩小文件的shell脚本。
看上去很简单,可以上手,但后来我遇到了一些用点分隔的比赛的麻烦。以下是一些我很难匹配的示例:
for($j = 0; $j < incomingData.customer['data'].length; $j++){
for(c=a.children.length-1;0<=c;c--)d
for(l=0;l<g.length;l++){d=g[l]
// this is a fun one to look at, I didn't know you could do a for loop like that.
for(h in b)if(!h.match(d||/margin|text\-align|width|border|padding/i))if(g)g=!1;else{var l=new CKEDITOR.htmlParser.element("span");l.attributes.style=h+":"+b[h];c.add(l);c=l;delete b[h]}CKEDITOR.tools.isEmpty(b)?delete a.attributes.style:a.attributes.style=CKEDITOR.tools.writeCssText(b);for(b=0;b<e.length;b++)c.add(e[b])},sortStyles:function(a){for(var b=["border","border-bottom","font-size","background"],c=m.parseCssText(a.attributes.style),d=m.objectKeys(c),e=[],g=[],h=0;h<d.length;h++)
for(var f=0,n=0,l=0,p,e=a.$.rows.length;l<e;l++)
for(var i = 0; i < this.audioLayerControl.listOfSequenceEditors.length; ++i)
我正在使用以下正则表达式:(?:for\(.*<\W?)(([\w]+)\.?)+(?:\[?)|(?:\.length)
您可以在此处查看匹配的颜色代码:https://regex101.com/r/GsPieq/2
由于某种原因,它仅与每个单词的最后一个单词匹配。有人可以帮助我了解为什么它不起作用吗?我需要它匹配1到5个单词,并用点分隔,不包括.length
或{"data"]
之类的括号中的任何内容,然后我可以循环遍历每个匹配项,将第一个字符转换为大写。
它不应该与已经正确组成的任何内容(例如for(c=AChildrenLength-1;0<=c;c--)d
这是我的思考过程:
(?:for\(.*<\W?) // Non capture but match any for loop up to the test
(
([\w]+)\.? // capture any alphanumeric char up to a dot if it exists
)+ // repeat if possible
(?:\[?)|(?:\.length) // non capture find where it ends