Страницы: 1
RSS
Как пользовательской функции RegExp отдать сразу несколько аргументов списком (вместо одного строкового), Power Query M
 
Коллеги, здравствуйте,

Помогите пож-та встроить в функцию возможность проверки из нескольких вариантов для RegExp

Читаю тему 'Регулярные выражения (RegExp) в Power Query', вижу строку var pattern = /" & regex & "/gi;, но такой практики пока не имеется, чтобы самому перестроить на получение списка из таблицы с вариантами проверки регэкспов. У меня их 15 штук, поэтому хотелось бы разработать одно решение, вместо 15 разных.
(причем, в моем случае, нужна простая проверка значения на наличие регэкспа, есть, или нет; и при наличии промаркировать соответствующим термином из той же таблицы с регэкспами - это уже целевая задача)


Код
let   fx=(txt as text, regex as text, delim as text)=>
    Web.Page(
        "<script>
            var x = '" & txt & "';
            var delim = '" & delim & "';
            var pattern = /" & regex & "/gi;
            var result = x.match(pattern).join(delim);
            document.write(result);
        </script>")[Data]{0}[Children]{0}[Children]{1}[Text]{0}
in
fx
 
Доброе время суток.
Вариант
Код
let
    lastMaleExts = {"[ыи]х", "[оа]в", "[ыи]н"},
    rexExpContains = (string, pattern) =>
    Web.Page(
        "<script>
            var regExp = /" & pattern & "/i;
            document.write(regExp.test('" & string & "'));
        </script>")[Data]{0}[Children]{0}[Children]{1}[Text]{0},
        p = "(" & Text.Combine(lastMaleExts, "|") & ")[^а-я]",
    test = rexExpContains("петров булкас", "(" & Text.Combine(lastMaleExts, "|") & ")[^а-я]")
in
    test
 
Андрей VG, извините, не знаю, как зовут Вас по отчеству - Вы не первый раз мне помогаете - Большое спасибо! Пока пойду осмысливать Ваш пример))  
 
Цитата
Дмитрий Марков написал:
Пока пойду осмысливать Ваш пример
Добро. Заодно найдите там некоторую неточность. :)
 
Цитата
Андрей VG написал: одно найдите там некоторую неточность
Петров, я думаю, на самом деле Булкин)

Андрей VG, поправьте меня пож-та, (пока не могу разобраться с ее подключением)
 
Цитата
Дмитрий Марков написал:
Петров, я думаю, на самом деле Булкин)
Не, правильно,
Цитата
"(" & Text.Combine(lastMaleExts, "|") & ")[^а-я]"
должно быть
Код
"(" & Text.Combine(lastMaleExts, "|") & ")[^а-я]?"
иначе, если переставить "булкас петров", то вернёт "false"
Цитата
Дмитрий Марков написал:
поправьте меня
Подправил. Внимательнее читайте комментарии к статье :)
 
Для замены параметр ввел, .replace вместо .test применил, не очень понимаю, чего не хватает для логики, может нужен List.MatchesAny …
Код
let
    rexExpContains = (string, pattern, замена) =>
    Web.Page(
        "<script>
            var regExp = /" & pattern & "/i;
            document.write(regExp.replace('" & string & "', '" & замена & "'));
        </script>")[Data]{0}[Children]{0}[Children]{1}[Text]{0}
in
    rexExpContains
Изменено: Дмитрий Марков - 11.08.2020 11:52:34
 
Дмитрий Марков, опишите чётко, что вы хотите, не прибегая к терминологии ни регулярных выражений ни Power Query.
Сначала вы хотели аналог того самого
Цитата
Дмитрий Марков написал:
List.MatchesAny
над несколькими шаблонами регулярных выражений
Цитата
Дмитрий Марков написал:
в моем случае, нужна простая проверка значения на наличие регэкспа, есть, или нет
для чего
Цитата
Дмитрий Марков написал:
параметр ввел, .replace вместо .test
:qstn:
Во первых .replace, test - Это методы, а не параметры.
Во вторых у объекта RegExp нет метода .replace. В рамках используемого в Power Query Web.Page - это javascript 3. Методов всего два: exec и test.
 
Андрей VG, для каждого случая, где RegEx нашел совпадение выражения, вместо true мне нужно вывести маркер этого регэкспа, из второго столбца таблицы с регэкспами    

Файл прилагаю
Изменено: Дмитрий Марков - 12.08.2020 10:36:14 (добавление файла образца с итогами)
 
Дмитрий Марков, а где в приложенном файле то, что должно получиться на выходе? И по существу-то вопрос по javascript, а не по Power Query :)
 
Цитата
Дмитрий Марков написал:
добавление файла образца с итогами
:qstn:
 
Андрей VG, спасибо я отправил на реквизиты. Спасибо
Страницы: 1
Наверх