2

私のソリューションでコーディングスタイルのパターンを見つけようとしています。使用例は、すべての文字列連結をかみそりでStringBuilderに置き換え、すべての文字列連結をJavaScriptに見つける必要があるということです。私は、以下の2つの方法で文字列連結を持つコード行をすべて取得することは非常に困難であることがわかっています。正規表現パターンマッチング連結

1) str = str+str2+str3+"str4 " etc; 
2) str+=str2+str3+"str4 " etc; 

私はVS 2013の発見ツールを使用してみましたし、文字+で検索、私はラインの地獄の多くを得ました。上記の2つのスタイルのコードラインのregパターンを手伝ってください。少なくとも行数は少なくなります。私は、上記の2つのスタイルのコードに対してReg Exを入手することは難しいと思っています。ここで

+0

これらの文字列から、あなたの予想出力は何ですか? –

+0

私はどんな出力も必要ありません。いくつかの連結はスタイル1であり、いくつかは第2の方法によるものです。私はVS 2013の検索(ctrl + f)機能を使用して、そのようなコード行を見つける必要があります。だから私はそれらをstringbuilderで置き換えることができます。 – user2998990

+0

変数名には 'str'や' str2'以外のものがありますか? –

答えて

2
([\w_]+[\w\d]*)(?:\s*=\s*\1{1}\s*\+\s*|\s*\+=\s*)("?[\w_]+[\w\d]*"?)(\s*\+\s*"?([\w_]+[\w\d]*"?))*; 

私は、変数が下線またはアルファベットで始めることが想定。必要に応じていくつかの変更を加えることができます。おそらく、

https://regex101.com/r/mE9zO7/2

+0

答えをありがとう。それはある程度は機能しています。そのような種類の文のために働いているように strCloseHTML = strCloseHTML + PagingControlHTML; 次のような文では機能しません。 strRowHTML = strRowHTML + "; – user2998990

+0

質問には2つのマッチ、8293のステップが表示されています。入力が大きければ、パフォーマンスに影響が及ぶでしょうか?ポスターを* while(readline())*にするべきでしょうか? – uTeisT

+0

これはhtmlコードにも一致するようにしたいのですか?それは正規表現でそのようなことをするのに苦労するでしょう。あなたが何をしようとしているのか分かりません。しかしあなたはそれを間違っている。 –

0

のようなもの:心の中で

(\w+ = \w+\+\w)|(\w+\s?\+=\s?\w+) 
0

キーピング変数名は、この正規表現は、連結のようなすべてのインスタンスと一致し_または[A-Za-z]で始めることができ、変数の命名規則。

正規表現:([A-Za-z_]\w+)\s*\+?=\s*(\1\s*)?(\+?\s*(([A-Za-z_]\w+)|"?.*?"?))*;

説明:

  • ([A-Za-z_]\w+)_またはwordクラスからの任意の文字が続く[A-Za-z]で始まる変数名と一致します。 速記連結演算子に一致するように

  • \s*\+?オプションwhitespace+

  • \s*(\1\s*)?簡略演算子が使用されていない場合、これは従来の連結方法と一致します。

  • (\+?\s*(([A-Za-z_]\w+)|"?.*?"?))*でなければなりません。これらは、ゼロまたは多くのです。これは、"hello world"のようなリテラル文字列でもよく、HTMLデータにも一致します。

Regex101 Demo

+0

次のいずれかのコード行に一致しません。 strCloseHTML = strCloseHTML + PagingControlHTML; strRowHTML = strRowHTML + "; – user2998990

+0

@ user2998990:HTMLコードとのマッチングを希望していません。 **質問を編集するときは、EDITのタイトル**を追加してください。そうでなければ、あなたの以前のバージョンの質問に対して働いた回答は、追加された部品では機能しないかもしれません。**有用ではありません** –

+0

すみません。しかし、この場合、文字列は何でもかまいません。 – user2998990

関連する問題