2014-02-15 3 views
1

Может ли кто-нибудь помочь мне с проблемой, с которой я сталкиваюсь? Довольно знакомы с Google Spreadsheet, но не с регулярным выражением.Порядок запросов в регулярном выражении

У меня есть функция

=REGEXEXTRACT(A1, ".*\/(\w+)\/(\w+)\/") 

так ради аргументов, А1 =

google.com/structure1/structure2/structure3/page.php 

Чем она выкладывает в B1 'структуре2' и С1 'Structure3'.

Теперь идеально, что я хочу, это «Structure3» в B1 и «Structure2» в C1.

Я знаю, что могу просто сделать D1 = B1, но я хочу понять это.

Регулярное выражение создано из поисковых запросов google и SO, которые я не совсем понимаю.

То, что я пытаюсь достичь, это ввести серию или URL-адреса в столбце A, а затем получить ее иерархию в основном.

выше регулярное выражение не работает, если у меня есть

google.com/page.php 

Любая помощь приветствуется.

Редактировать: Я предполагаю, что скрипт должен был бы выполнить последнюю проблему, но я пытаюсь понять, как ее решить?

+0

Ваше регулярное выражение не будет работать на 'google.com/page.php', потому что, как вы его написали, он ищет три косые черты с захватами всех компонентов между первым и последним. Вам нужно либо сделать менее явное регулярное выражение для содержимого вашей ячейки, либо создать тот, который может работать с группами переменных. Это может помочь: http: // stackoverflow.com/questions/5018487/regular-expression-with-variable-number-of-groups –

+0

Хорошо, поэтому я читал о регулярном выражении и думаю, что теперь я лучше понимаю спасибо –

ответ

0

Я придумал альтернативное решение для пользовательских функций.

Это не путь элегантный и оптимизирован, но делает работу на текущий

function parent(w) { 
var string = w.split("/"); 
var components = w.split("/").length; 
var parent = components-2; 
var child = string[parent]; 
return (child); 
} 

function child(w) { 
var string = w.split("/"); 
var components = w.split("/").length; 
var parent = components-1; 
var child = string[parent]; 
return (child); 
} 

Wrap ячейку в массиве, подсчитывают массив, а затем потяните последний компонент и второй последнюю часть строки.

0

REGEXEXTRACT - это встроенная функция, которая принимает два аргумента, местоположение входного значения и регулярное выражение. Затем он помещает захваченные группы (части в круглых скобках) в соседние ячейки по порядку. Вы не можете изменить это поведение, потому что вы не можете редактировать код встроенной функции. D1 = B1 - ваш лучший выбор, если вы хотите structure3 до structure2.

Это регулярное выражение не соответствует google.com/page.php. Каково ваше желаемое поведение? Если вы хотите, чтобы всегда соответствовать, попробуйте сделать дополнительные структуры в URL не обязательно, так как:

".*(?:\/(\w+))?(?:\/(\w+)\/)?"

(?:foo) не является захват группы (т.е. она не будет введена в B1). (?:bar)? делает группу, не связанную с захватом, необязательной.

+0

В идеале я хотел бы написать скрипт, который будет использовать Сплит, а затем регулярное выражение для захвата последних двух групп в URL-адресе. Затем используйте организационную диаграмму для просмотра иерархии. Я удивлен, что это еще не сделано (что я знаю). Попробуем несколько разных вещей, возможно, используя string.split(), а затем обновим поток –

Смежные вопросы