0

我有这个 JS 正则表达式:

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

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

完整的名称示例。例子:

qq8-qq-q-anything => OK

没有第一组:

qq-q-anything => OK

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

任何东西-qq-q-anything => 好的

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

4

2 回答 2

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

于 2018-05-03T21:01:34.450 回答
1

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

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

现场演示

于 2018-05-03T21:20:58.997 回答