2016-10-25 35 views
1

Привет, я пытаюсь написать регулярное выражение, чтобы заменить появление имени ячейки в формулах excel с псевдонимом вместо имени листа. Я использую Js XLS для синтаксического анализа excel. например:Regex для замены формулы excel с именем листа

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

Выход Обязательный

+a_AA74/AVERAGE(b_Z40:b_AA40) 

Выходной ток

+a_AA74/AVERAGE(b_Z40:a_AA40) 

, где 'а' представляет собой текущий лист, в котором формул написана и 'B' это имя друга sheet.I хочу добавить имя листа перед каждым именем ячейки. Но в этом типе формулы формулы формула должна содержать начальное имя листа.

Текущий код я использую

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"); 
+0

Проверьте https://jsfiddle.net/33bxwc2c/ и сообщите мне, если это сработает для вас. –

+0

спасибо, что я ищу. – axcl

ответ

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) { 
 
    \t return 'b_'+g1 + ":b_" + g2; 
 
    } else return '+a_A'; 
 
}); 
 
console.log(res);

The ^\+A!?|'b'!([A-Z]+\d+):([A-Z]+\d+) регулярные выражения матчи:

  • ^\+A!? - +A или +A! в начале строки
  • | - или
  • 'b'! - последовательность литералов символов
  • ([A-Z]+\d+) - Группа 1 1+ захвата верхнего регистра ASCII символы следуют с 1+ цифр
  • : - двоеточие
  • ([A-Z]+\d+) - Группа 2 Захват изображения 1+ прописные ASCII символы следуют с 1+ цифр

В замене мы проверяем соответствие группы 1 (= участие в матче). Если да, добавим b_ к полученному содержимому, если нет, добавим a_ в A.