Преобразование ввода данных пользователем представляет в виде строки к регулярному выражению

Мне пришлось подключить порт конечной точки управления (по умолчанию 19000) к соединению Service Fabric в конвейере выпуска:

tcp: //clustername.westeurope.cloudapp.azure.com: 19000

Не указывая порт, вы получите вышеуказанную ошибку.

315
задан nhahtdh 15 July 2015 в 17:44
поделиться

6 ответов

Используйте конструктор объекта RegExp для создания регулярного выражения из строки:

var re = new RegExp("a|b", "i");
// same as
var re = /a|b/i;
582
ответ дан 23 November 2019 в 01:06
поделиться

Я использую eval для решения этой проблемы.

Например:

    function regex_exec() {

        // Important! Like @Samuel Faure mentioned, Eval on user input is a crazy security risk, so before use this method, please take care of the security risk. 
        var regex = $("#regex").val();

        // eval()
        var patt = eval(userInput);

        $("#result").val(patt.exec($("#textContent").val()));
    }
-1
ответ дан 23 November 2019 в 01:06
поделиться
var flags = inputstring.replace(/.*\/([gimy]*)$/, '$1');
var pattern = inputstring.replace(new RegExp('^/(.*?)/'+flags+'$'), '$1');
var regex = new RegExp(pattern, flags);

или

var match = inputstring.match(new RegExp('^/(.*?)/([gimy]*)$'));
// sanity check here
var regex = new RegExp(match[1], match[2]);
65
ответ дан 23 November 2019 в 01:06
поделиться

Используйте конструктор объекта JavaScript RegExp .

var re = new RegExp("\\w+");
re.test("hello");

Вы можете передать флаги в качестве второго строкового аргумента конструктору. Подробнее см. В документации.

14
ответ дан 23 November 2019 в 01:06
поделиться

Я предлагаю вам также добавить отдельные флажки или текстовое поле для специальных флагов. Таким образом становится ясно, что пользователю не нужно добавлять какие-либо // . В случае замены предоставьте два текстовых поля . Это сделает вашу жизнь намного проще.

Почему? Потому что в противном случае некоторые пользователи добавят // , а другие - нет. А некоторые допустят синтаксическую ошибку. Затем, после того, как вы удалили // , вы можете получить синтаксически допустимое регулярное выражение, которое не похоже на то, что задумал пользователь, что приведет к странному поведению (с точки зрения пользователя).

2
ответ дан 23 November 2019 в 01:06
поделиться

Вы можете запросить флаги с помощью флажков, а затем сделать что-то вроде этого:

var userInput = formInput;
var flags = '';
if(formGlobalCheckboxChecked) flags += 'g';
if(formCaseICheckboxChecked) flags += 'i';
var reg = new RegExp(userInput, flags);
1
ответ дан 23 November 2019 в 01:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: