正则表达式重复模式

时间:2019-07-30 11:17:23

标签: javascript regex

我需要满足以下条件的正则表达式。 1.字符串的总长度为300个字符。 2.应仅以&,-,/,#开头,后跟3 or 4 alphanumeric characters 3.上面的模式可以是连续的字符串,最高可达300 characters

字符串示例-&ACK2-ASD3#RERT ...

我尝试重复该小组,但没有成功。

(^[&//-#][A-Za-z0-9]{3,4})+ 

那是行不通的。只是匹配第一组

3 个答案:

答案 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");
}