我需要满足以下条件的正则表达式。
1.字符串的总长度为300个字符。
2.应仅以&,-,/,#
开头,后跟3 or 4 alphanumeric characters
3.上面的模式可以是连续的字符串,最高可达300 characters
字符串示例-&ACK2-ASD3#RERT ...
我尝试重复该小组,但没有成功。
(^[&//-#][A-Za-z0-9]{3,4})+
那是行不通的。只是匹配第一组
答案 0 :(得分:2)
您可以先使用/^(?:[&\/#-][A-Za-z0-9]{3,4})+$/
正则表达式验证字符串,然后检查字符串长度(使用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}
-三个或四个字母数字字符$
-字符串的结尾。请参见regex demo。
请注意,缺少g
修饰符以及与RegExp#test
一起使用的验证正则表达式,并且它必须存在于提取正则表达式中(因为我们只需要检查一次字符串,但是提取多次出现)。
答案 1 :(得分:2)
您已经关闭。首先添加前瞻:(?=.{0,300}$)
,使其满足长度要求,并使用纯RegExp进行操作:
/(?=.{0,300}$)^([&\-#][A-Za-z0-9]{3,4})+$/.test("&ACK2-ASD3#RERT")
答案 2 :(得分:1)
您可以尝试以下regex。
const regex = /^([&\/\-#][A-Za-z0-9]{3,4}){0,300}$/g;
const str = `&ACK2-ASD3#RERT`;
if (regex.test(str)) {
console.log("Match");
}