具有预定义开始和结束模式的正则表达式

Regex with predefined start and end pattern

我的正则表达式模式必须以 /* 开头并且必须以 */ 结尾;在此之间它可能包含所有字母、数字、特殊字符——零次或多次。

我为此制作了以下正则表达式:

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

但此表达式不会显示以下模式的错误:

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

这是错误的。必须以/*开头,以*/结尾;不惜任何代价。

以下是 angular 用于测试此模式的代码。请有人帮忙!

代码:

<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>

参考:

Regular expression include and exclude special characters

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

方括号表示任何包含的字符。因此,将您的正则表达式更改为:

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

您可能会阅读有关 Regex charclass


旁注:

  • 您不需要在 class 内转义 .?()*{}
  • a-zA-Z0-9_ 等同于 \w.
  • 在一个字符 class 中,- 表示一个范围,因此 \)-_ 表示从 ) 到 _

我会写:

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

或者,如果您想捕获 任何内容(甚至是多行注释):

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

demo