正则表达式字符识别

Regex character recognition

本文关键字:字符识别 正则表达式      更新时间:2023-09-26

>我有一个注释字符串,用户可以在其中的注释中的任何位置键入"@someusername"。发生这种情况时,将显示用户列表,直到在用户名末尾键入空格。我有一个正常工作的正则表达式,只是当 @ 符号自行输入时我无法让它返回 true。我必须输入@,然后输入另一个字符才能使其返回true。所以基础知识是,我需要一个正则表达式,它将在以下情况下返回 true:

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

现在我有以下内容:

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

这有效,除了在以我提到的方式键入@时立即返回true,并且在用户名后键入空格和字符之前它不会关闭。任何帮助都非常感谢。

您应该

将正则表达式更改为:/^|'s)@'S*$/ 。''S 后面的 * 表示"最后一个字符的零个或多个",而您有一个 +,它是"最后一个字符中的一个或多个"。

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

.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);
};