正则表达式字符识别

时间:2014-04-02 17:11:27

标签: javascript regex angularjs

我有一个评论字符串,用户可以输入" @ someusername"评论中的任何地方。发生这种情况时,将显示用户列表,直到在用户名末尾键入空格。我有一个正在运行的正则表达式,除了当@符号单独输入时我无法返回true。我必须输入@然后输入另一个字符才能返回true。所以基础知识是,我需要一个正则表达式,如果和while时将返回true:

  • @在评论的开头
  • 输入
  • @是键入的,前面有一个空格(所以他们可以键入test@test.com,它不会返回true)
  • @可以接受任何字符,但在输入空格时会关闭

现在我有以下内容:

$scope.userList = function(comment) {
  pattern = /(?:^|\s)@\S+$/;
  if(pattern.test(comment)) {
    $scope.usersShow = true;
  }
  else {
    $scope.usersShow = false;
  }
};

除非在我提到的方式输入@时立即返回true,否则它将起作用,并且在用户名后输入空格和字符之前它不会关闭。非常感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

您应该将正则表达式更改为:/^|\s)@\S*$/。在\ S之后的*表示“最后一个字符的零或更多”,而你有一个+是“最后一个字符中的一个或多个。”

答案 1 :(得分:0)

以下是基于上述答案和我做过的一些调整的完整解决方案:

HTML:

input.comment-text ng-model="comment.text" ng-change="showUserList(comment.text) ng-trim="false"

JS:

$scope.showUserList = function(comment) {
  var pattern = /(?:^|\s)@\S*$/;
  $scope.usersShow = pattern.test(comment);
};