1

如果'#'在字符串中超过 1 次,则需要正则表达式通过模式排除匹配字符串

var srg = new RegExp(/([a-z0-9#]+[\s])/g);

字符串:

fdsffmsd,fmsd 
qwjswkds03sj 
ewew 
rfekwjkr#jfkdlsf 
wiru0ksd#erjk#jkls 
# 
casdw##kfdl 

结果

fdsffmsd, fmsd

qwjswkds03sj

呸呸呸

rfekwjkr#jfkdlsf

wiru0ksd#erjk#jkls

#

casdw##kfdl

小提琴

谢谢

更新:

请原谅我的任务解释不好

我更新新小提琴 新小提琴

var srg = new RegExp(/((\-)[a-z0-9#]+[\s])/g);

我们所做的:

  • 搜索 '-' 字符

  • 如果找到 - 匹配 a-z0-9# 而没有遇到任何空格

  • 需要添加条件,仅当模式捕获中 # 0 或 1 次时匹配

可能像 [a-z0-9#{0,1}] 表示 # 0 次或 1...

4

4 回答 4

2

描述

该表达式将:

  • 要求字符串以-字符开头
  • 允许#在字符串中最多出现 1 次
  • 防止空格出现在字符串中
  • 允许一个或多个a-z0-9字符
  • 允许#字符出现在字符串中的任何位置,包括开头和结尾

^(?!(?:.*?#){2,})-[a-z0-9#]+$

在此处输入图像描述

NODE                     EXPLANATION
--------------------------------------------------------------------------------
  ^                        the beginning of the string
--------------------------------------------------------------------------------
  (?!                      look ahead to see if there is not:
--------------------------------------------------------------------------------
    (?:                      group, but do not capture (at least 2
                             times (matching the most amount
                             possible)):
--------------------------------------------------------------------------------
      .*?                      any character except \n (0 or more
                               times (matching the least amount
                               possible))
--------------------------------------------------------------------------------
      #                        '#'
--------------------------------------------------------------------------------
    ){2,}                    end of grouping
--------------------------------------------------------------------------------
  )                        end of look-ahead
--------------------------------------------------------------------------------
  -                        '-'
--------------------------------------------------------------------------------
  [a-z0-9#]+               any character of: 'a' to 'z', '0' to '9',
                           '#' (1 or more times (matching the most
                           amount possible))
--------------------------------------------------------------------------------
  $                        before an optional \n, and the end of the
                           string

例子

现场演示

样品

-abcdefghijklmnopqrstuvwxyz1234567890     = good
-abcdefghijklmnopq#rstuvwxyz1234567890    = good
-abcdefghijklmnopq##rstuvwxyz1234567890   = bad
-#abcdefghijklmnopqrstuvwxyz1234567890    = good
-##abcdefghijklmnopqrstuvwxyz1234567890   = bad
-#abcdefghijklmnopqrstuvwxyz1234567890    = good
-abcdefghijklmnopqrstuvwxyz1234567890#    = good
-#abcdefghijklmnopqrstuvwxyz1234567890#   = bad
#-abcdefghijklmnopqrstuvwxyz1234567890    = bad
于 2013-08-27T12:39:30.943 回答
2

编辑:根据您的更新:

#您可以使用此正则表达式在字符串中允许最多一个:

var srg = new RegExp('^-[a-z0-9]+#?[a-z0-9]+$');

'-wiru0ksd#erjk#jkls'.match(srg); //=> null

'-fdsffmsd,fmsd'.match(srg); //=> null

'-rfekwjkr#jfkdlsf'.match(srg); //=> ["-rfekwjkr#jfkdlsf"]
于 2013-08-27T11:01:44.567 回答
1

第一次尝试:

var srg = new RegExp(/[a-z0-9]*#?[a-z0-9]*\s/g);

说明: #?指定 # 字符可以出现一次或根本不出现。这夹在两个[a-z0-9]*表达式之间,允许在前后使用字母数字。最后\s指定单个空格字符必须在之后出现(与您的原始正则表达式一致)。

编辑 - 第二次尝试:

var srg = new RegExp(/([a-z0-9]+#?[a-z0-9]*|[a-z0-9]*#?[a-z0-9]+)\s/g);

这看起来更复杂,但它所做的只是采用上面的正则表达式并将其分成两种可能性 - 第一种是在#之前必须至少有一个字母数字,第二种是在 #之后必须至少有一个字母数字。

于 2013-08-27T10:57:22.587 回答
1

您可以做的是调用'your line'.match(/#/g).length您的方法,如果长度大于 1,您可以排除这些结果。之后,如果满足此条件,则通过链接执行匹配。

于 2013-08-27T10:48:23.677 回答