[英]Regex for repeating pattern
我需要一个满足以下条件的正则表达式。 1.字符串总长度300个字符。 2.应以&,-,/,#
开头,后面只跟3 or 4 alphanumeric characters
3.上面的图案可以连续字符串,最多300 characters
字符串示例 - &ACK2-ASD3#RERT ...
我试过重复这个小组但不成功。
(^[&//-#][A-Za-z0-9]{3,4})+
这不起作用..只是匹配第一组
您可以首先使用/^(?:[&\\/#-][A-Za-z0-9]{3,4})+$/
regex验证字符串并检查字符串长度(使用s.length <= 300
)然后返回所有匹配与验证正则表达式的一部分:
var s = "&ACK2-ASD3#RERT"; var val_rx = /^(?:[&\\/#-][A-Za-z0-9]{3,4})+$/; if (val_rx.test(s) && s.length <= 300) { console.log(s.match(/[&\\/#-][A-Za-z0-9]{3,4}/g)); }
正则表达式细节
^
- 字符串的开头 (?:[&\\/#-][A-Za-z0-9]{3,4})+
- 出现1次或多次:
[&\\/#-]
- &
, /
, #
或-
[A-Za-z0-9]{3,4}
- 三个或四个字母数字字符 $
- 结束字符串。 请参阅正则表达式演示 。
请注意,缺少g
修饰符,并且验证正则表达式与RegExp#test
一起使用,并且它必须存在于提取正则表达式中(因为我们只需检查字符串一次,但提取多次出现)。
你很亲密 将前瞻: (?=.{0,300}$)
到开头以使其满足长度要求并使用纯RegExp执行:
/(?=.{0,300}$)^([&\-#][A-Za-z0-9]{3,4})+$/.test("&ACK2-ASD3#RERT")
您可以尝试以下正则表达式 。
const regex = /^([&\\/\\-#][A-Za-z0-9]{3,4}){0,300}$/g; const str = `&ACK2-ASD3#RERT`; if (regex.test(str)) { console.log("Match"); }
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.