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

时间:2018-05-03 20:51:59

标签: javascript regex optional regex-group optional-values

我有这个JS正则表达式:

qq8-qq-q-anything => OK

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

完整的名称示例。例如:

qq-q-anything => OK

没有第一组:

.git

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

任何事情-qq-q-anything =>行

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

2 个答案:

答案 0 :(得分:1)

您应该指定字符串应该以“正则表达式”开头,因此只需添加^来指定起点。

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);

答案 1 :(得分:1)

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

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

<强> Live demo