1

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

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

 [/*][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

4

1 回答 1

3

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

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

您可能会阅读有关Regex charclass 的信息


边注:

  • 你不需要在类中逃避., ?, (),*{}
  • a-zA-Z0-9_等价于 \w。
  • 在 char 类中,-表示范围,因此\)-_表示从 ) 到 _

我会写:

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

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

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

演示

于 2016-05-26T08:16:50.397 回答