Регулярное выражение с предопределенным начальным и конечным шаблоном

Мой шаблон регулярного выражения должен начинаться с /* и заканчиваться */; между этим он может содержать все алфавиты, цифры, специальные символы - ноль или более раз.

Для этого я сделал следующее регулярное выражение:

 [/*][a-zA-Z0-9~@#\^\$&\*\(\)-_\+=\[\]\{\}\|\\,\.\?\s]*[*/;]

Но это выражение не показывает ошибку для таких шаблонов, как:

  1. /*
  2. / * sdfsdff
  3. /* sdfsfeff *
  4. /* fefef3323 */

Что неправильно. Он должен начинаться с /* и заканчиваться */; любой ценой.

Ниже приведен угловой код для тестирования этого шаблона. Пожалуйста, помогите кто-нибудь!

КОД:

<html>

<head>
        <script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.4.8/angular.min.js" ></script> 
        <script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.4.8/angular-messages.min.js"></script> 
</head>

<body ng-app="myApp" ng-controller="myCtrl">

<form name="form1" novalidate>
    {{form1.age.$error}}
    <input type="text" name="age" ng-model="myAge" ng-pattern="/^[/*][a-zA-Z0-9~@#\^\$&\*\(\)-_\+=\[\]\{\}\|\\,\.\?\s]*[*/;]$/" />
    <div ng-messages="form1.age.$error" >
        <span ng-message="pattern">This field has wrong pattern.</span>
    </div>
</form> 

<script>
//module declaration
var app = angular.module("myApp",['ngMessages']);
//controller declaration
app.controller('myCtrl',function($scope){
    //code goes here ... 
});
</script> 

</body>

</html>

Ссылка:

Регулярное выражение включает и исключает специальные символы

http://www.regular-expressions.info/repeat.html


person Deadpool    schedule 26.05.2016    source источник
comment
удалить класс символов из начала и конца   -  person rock321987    schedule 26.05.2016
comment
попробуйте regexr.com для написания вашего регулярного выражения   -  person NatureShade    schedule 26.05.2016
comment
@ rock321987 это хорошо, но сломается на нескольких строках   -  person Thomas Ayoub    schedule 26.05.2016


Ответы (1)


Скобки означают любой из содержащихся символов. Поэтому измените регулярное выражение на:

\/\*[a-zA-Z0-9~@#\^\$&\*\(\)-_\+=\[\]\{\}\|\\,\.\?\s]*\*\/;

Вы можете прочитать о символьном классе Regex.


Примечание:

  • вам не нужно экранировать ., ?, (), * и {} внутри классов
  • a-zA-Z0-9_ эквивалентно \w.
  • внутри класса символов - означает диапазон, поэтому \)-_ означает от ) до _

я бы написал:

\/\*[-\w~@#^$&*()+=\[\]{}|\\,.?\s]*\*\/;

Или, если вы хотите захватить что угодно (даже многострочные комментарии):

\/\*[\w\W]*?\*\/;

См. демонстрацию.

person Thomas Ayoub    schedule 26.05.2016