1

こんにちは、Excel数式のセル名の出現をシート名の代わりにエイリアスに置き換える正規表現を作成しようとしています。Excelの解析にJs XLSを使用しています。元 :

 +AA74/AVERAGE('b'!Z40:AA40)

必要な出力

 +a_AA74/AVERAGE(b_Z40:b_AA40)

現在の出力

 +a_AA74/AVERAGE(b_Z40:a_AA40)

ここで、「a」は数式が書き込まれている現在のシート、「b」は他のシートの名前です。各セル名の前にシート名を追加したいと思います。ただし、このタイプの数式では、範囲数式に開始範囲シート名を含める必要があります。

私が使用している現在のコード

var re = new RegExp("A.","g");
res = res.replace(re, "a_");
var re = new RegExp("A!","g");
res = res.replace(re, "a_");
var re = new RegExp("'B'!","g");
res = res.replace(re, "b_");
var re = new RegExp("'B'.","g");
res = res.replace(re, "b_");
res = res.replace(/\s/g,"");
res = res.replace(/(^|[^_A-Z])([A-Z]+\d+)/g, "$1"+'a_'+"$2");
4

1 に答える 1

1

あなたは使用することができます

var re = /^\+A!?|'b'!([A-Z]+\d+):([A-Z]+\d+)/g;
var s = "+AA74/AVERAGE('b'!Z40:AA40)";
var res = s.replace(re, function(m, g1, g2) {
  if (g1) {
  	return 'b_'+g1 + ":b_" + g2;
  } else return '+a_A';
});
console.log(res);

^\+A!?|'b'!([A-Z]+\d+):([A-Z]+\d+)正規表現は次のように一致します。

  • ^\+A!?-+Aまたは+A!文字列の先頭
  • | - また
  • 'b'! - リテラル文字のシーケンス
  • ([A-Z]+\d+) - グループ 1 は、1 つ以上の数字が続く 1 つ以上の大文字の ASCII 文字をキャプチャします
  • :- コロン
  • ([A-Z]+\d+)- グループ 2 は、1 つ以上の数字が続く 1 つ以上の大文字の ASCII 文字をキャプチャします

置換では、グループ 1 が一致した (= 試合に参加した) かどうかを確認します。はいの場合b_はキャプチャされたコンテンツに追加し、そうでない場合は単に に追加a_Aます。

于 2016-10-26T07:06:51.863 に答える