如何创建一个可选组,但如果该组与我的正则表达式最匹配?

How to make a optional group, but if the group exists most match with my regex?

我有这个 JS 正则表达式:

var re = /(\w\w\d-{1})?\w\w-{1}\w-{1}?/;

对于文件名,第一组必须是可选的:

全名示例。示例:

qq8-qq-q-anything => OK

没有第一组:

qq-q-anything => OK

但如果我放任何东西,仍然有效:

anything-qq-q-anything => OK

我希望第一组是可选的,但如果文件名有第一组,它必须与我的正则表达式字词匹配。

你应该指定字符串应该 "start with" 你的正则表达式,所以只添加 ^ 来指定起点。

const re = /^(\w\w\d-{1})?\w\w-{1}\w-{1}?/;

const strs = ['qq8-qq-q-anything', 'qq-q-anything', 'anything-qq-q-anything'];


const result = strs.map(str => re.test(str));

console.log(result);

\w 匹配数字和字母。它也包括 _ 个字符。您应该明确使用字符 class 作为字母,并使用抑扬符 ^ 锚定您的正则表达式以断言输入字符串的开头。您也不需要 {1} 量词,因为除非另有定义,否则前面的模式只检查一次。您可能还需要 i(不区分大小写)标志:

var re = /^(?:[a-z]{2}\d-)?[a-z]{2}-[a-z]-/i;

Live demo