сценарий
Я использую ng-pattern
в проекте, где мне нужно динамически генерировать регулярные выражения с помощью конкатенации строк, что означает, что конечным результатом является var regexp = "regexp"
а не var regexp =/regexp/
.
Проблема
Я знаю, что этот код работает:
//JavaScript
$scope.regex = /[^0-9\|]+/;
//HTML
<input type="text" name="first" ng-model="a" ng-pattern="regex">
Но мне нужно иметь возможность использовать такую строку:
//JavaScript
$scope.regex = "[^0-9\|]+";
//HTML
<input type="text" name="first" ng-model="a" ng-pattern="{{regex}}">
Вопрос
Как я могу использовать динамически генерируемое строковое регулярное выражение с ng-pattern
?
Plunker
Я подготовил плункер, демонстрирующий три разных применения ng-pattern
в которых работает только буквальное регулярное выражение. Я был бы так благодарен за любую помощь. Благодарю!
Когда вы выполняете var c =/string/; Вы создаете литерал регулярного выражения. Это не единственный способ создать регулярное выражение в JS. Подобно тому, как вы можете создавать объекты другими способами, кроме объектных литералов. RegExp принимает строку и возвращает литерал регулярного выражения, используя эту строку в качестве шаблона.
$scope.regex = new RegExp(string)
Поэтому, если бы я хотел динамически создать регулярное выражение, используя конкатенированные строки. Это было бы похоже на что-то подобное.
var something = "a";
something += "|b"
$scope.regex = new RegExp(something);
// $scope.regex == /a|b/