0%

一个 Js 正则表达式

最近项目里有个前端判断输入文本格式的需求,需要判断输入的文本是否符合以下格式:

js写一个正则,可以匹配以下几种情况
1,纯文本
2[aaa][]之间可以有3-15个字符
3a[aaa],任意字符加上[aaa]结构
4a[aaa]/[aaa],如果有多个[aaa]结构,需要用/分隔
4[aaa]/[aaa]

其实之前用 gpt 一直没有找到好的方式,感觉跟自己的描述有很大关系,今天这样子用类似程序的语言,反而能更好的理解需求。不过最终还是没有匹配纯文本的情况,感觉好像这种情况也不用匹配哈。

为了匹配您所描述的几种情况,我们需要构建一个正则表达式,它能够覆盖所有这些情况。我们需要注意的是:

  1. 纯文本可以是任意字符,但不能包含方括号或斜杠(以避免与其他模式混淆)。
  2. [aaa]结构必须包含 3 到 15 个字符,且字符不能是方括号。
  3. a[aaa]结构中,a可以是任意字符(除了方括号和斜杠),后面跟着[aaa]结构。
  4. a[aaa]/[aaa][aaa]/[aaa]结构,其中的a[aaa]定义同上,且[aaa]可以重复出现,每次出现都用斜杠分隔。

考虑到这些要求,我们可以构建以下正则表达式:

function testStructure(str) {
// 正则表达式解释:
// ^ 开始
// [^[\]/]* 匹配任意非方括号和斜杠的字符序列(纯文本)
// (\[[^\[\]]{3,15}\]) 匹配 [aaa] 结构,其中 aaa 为 3 到 15 个非方括号字符
// (\/\[[^\[\]]{3,15}\])* 匹配 0 次或多次的 /[aaa] 结构
// $ 结束
const regex = /^[^[\]/]*(\[[^\[\]]{3,15}\])(\/\[[^\[\]]{3,15}\])*$/;
return regex.test(str);
}

在这个正则表达式中:

  • ^[^[\]/]* 匹配字符串的开始,并允许有任意数量的非方括号和斜杠字符(即纯文本部分)。
  • (\[[^\[\]]{3,15}\]) 匹配一个方括号内的 3 到 15 个非方括号字符(即[aaa]结构)。
  • (\/\[[^\[\]]{3,15}\])* 匹配零次或多次的/[aaa]结构。
  • $ 表示字符串的结束。

这个正则表达式应该能够匹配您描述的所有情况。

参考

online regex