Use regular expressions to find variables matching certain criteria

爱⌒轻易说出口 提交于 2019-12-11 16:52:37

问题


I want to use regular expression in Notepad++ to find expressions as follows:

form1.subform[0].linestatus1.rawValue

or

form1.subform.linestatus1.rawValue

or, the general pattern is as follows (Adobe LiveCycle FormCalc expression):

element1.element2[index1].element3[index2].element4.element_n.propName

where the [index1] and [index2] are optional.

Also, the match should exclude the following (Adobe LiveCycle JavaScript expression):

xfa.resolveNode("form1.subform.linestatus1").rawValue xfa.resolveNode("form1.subform[0].linestatus1").rawValue

Or the general pattern is (must not match the following): xfa.resolveNode("element1.element2[index1].element3[index2].element4").propName

where propName could be any of the following fixed names: - rawValue - access - formattedValue ...etc.

The objective eventually is to be able to convert the the the from the first Syntax (FormCalc) to the second one (JavaScript) using find/replace.

Appreciate your help.

Note: so far, I was able to use this expression but not enough:

\b(?!xfa\.resolveNode\(\")([a-zA-Z_][a-zA-Z0-9_]*(\[([0-9]+)\])?\.)*rawValue

EDIT: I think I found the solution but I am not sure why it is working. Check this:

(^|[\s(])(?!xfa\.resolveNode\(")(([a-zA-Z][a-zA-Z0-9]*(\[[0-9]+\])?\.?)*)(\.rawValue)

and here is a working sample:

https://regex101.com/r/nY9vT1/9

Appreciate it if someone could explain why it is working and if there is a better solution?

EDIT: Here is a simplified regx. The last one was crashing in certain cases due to complexity:

Find:   (?:(^|[\s;(])(?!xfa\.resolveNode\(\".+\"\))((?:[a-zA-Z0-9_\.\[\]]*))(\.(?:rawValue|access|fillColor)))
Replace:    \1xfa.resolveNode\("\2"\)\3

Check it here.

Tarek

来源:https://stackoverflow.com/questions/36142272/use-regular-expressions-to-find-variables-matching-certain-criteria

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!