我试图在我的解决方案中找到一些编码风格的模式。用例是我必须在razor中用StringBuilder
替换所有字符串连接,并在JavaScript
中找到所有字符串连接。我发现很难通过以下两种方式获得所有这些具有字符串连接的代码行。
1) str = str+str2+str3+"str4 " etc;
2) str+=str2+str3+"str4 " etc;
我尝试使用VS 2013的查找工具并搜索字符+
,我得到了很多线条。请帮我解决以上2种代码行样式的reg ex模式,因此至少会减少行数。我发现很难获得以上2种代码样式的Reg Ex。
答案 0 :(得分:2)
([\w_]+[\w\d]*)(?:\s*=\s*\1{1}\s*\+\s*|\s*\+=\s*)("?[\w_]+[\w\d]*"?)(\s*\+\s*"?([\w_]+[\w\d]*"?))*;
这里我假设变量可以以下划线或字母字符开头。如果需要,您可能需要对其进行一些更改。
答案 1 :(得分:0)
也许是这样的:
(\w+ = \w+\+\w)|(\w+\s?\+=\s?\w+)
答案 2 :(得分:0)
请记住变量名称可以以_
或[A-Za-z]
开头的变量命名约定。此正则表达式匹配所有此类连接实例。
正则表达式: ([A-Za-z_]\w+)\s*\+?=\s*(\1\s*)?(\+?\s*(([A-Za-z_]\w+)|"?.*?"?))*;
<强>解释强>
([A-Za-z_]\w+)
匹配以_
或[A-Za-z]
开头的变量名称,后跟word
类中的任何字符。
\s*\+?
可选whitespace
和+
以匹配速记连接运算符。
\s*(\1\s*)?
如果没有使用速记运算符,那么这将与传统的连接方式相匹配。
(\+?\s*(([A-Za-z_]\w+)|"?.*?"?))*
后续变量名称必须存在。这些可能是零或很多。这也可以是"hello world"
这样的文字字符串,也可以匹配 HTML数据。
<强> Regex101 Demo 强>