正则表达式字符串包含最多一个 '#'
需要正则表达式的模式来匹配字符串排除如果 '#' 更多的则1串倍正则表达式字符串包含最多一个 '#'
var srg = new RegExp(/([a-z0-9#]+[\s])/g);
字符串:
fdsffmsd,fmsd
qwjswkds03sj
ewew
rfekwjkr#jfkdlsf
wiru0ksd#erjk#jkls
#
casdw##kfdl
结果
fdsffmsd,fmsd
qwjswkds03sj
ewew
rfekwjkr#jfkdlsf
wiru0ksd#erjk#jkls
#
casdw ## kfdl
感谢
UPDATE:
请原谅我没有好任务的解释
我更新新的小提琴 New fiddle
var srg = new RegExp(/((\-)[a-z0-9#]+[\s])/g);
我们做什么:
搜索“ - ”字符
若发现 - 匹配,0-9#,而不能满足任何空间
需要添加条件,比赛仅#0或模式1倍捕捉
可能会像[A-Z0-9#{0,1}]的意思是#0次或一个...
说明
这个表达式:
- 要求字符串以0开头字符
- 允许
#
到至多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
你可以做的就是调用'your line'.match(/#/g).length
在你的方法中,如果长度大于1,你可以排除这些结果。在这之后,如果这个条件满足,通过链接进行匹配。
对不起,我会用其他正则表达式其中包含更多其他条件 – Dmitry
第一次尝试:
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);
这看起来更复杂,但是它的所有做的是上述正则表达式,并分裂成两种可能性 - 第一,其中必须有至少一个字母数字前#和第二个在之后必须至少有一个字母数字#。
你需要匹配不包含双'##线'? –
yes,right,only a-z0-9#but not if#more than 1 – Dmitry
如果行正常,或者您想搜索所有'a-z0-9#'的页面或文件,您需要匹配只要他们不包含2'#'? –