const regex = /^\w+(?:[-\s]\w+)*$/;
const valid = [
'a',
'abc',
'a-b',
'aaa aaa aaa aaa',
'aaa-aaa aaa-aaa',
'a'.repeat(100),
`a-${'a'.repeat(100)}`,
`a-${'a'.repeat(100)}-${'a'.repeat(100)}`,
`a-${'a'.repeat(100)}-${'a'.repeat(100)}`,
`a ${'a'.repeat(100)} ${'a'.repeat(100)}`,
`a ${'a '.repeat(100)}a`,
]
const invalid = [
'-',
'a-',
'-b',
'aaa aaa aaa aaa-',
`a-${'a'.repeat(100)}-${'a'.repeat(100)}-`,
`a ${'a'.repeat(100)} ${'a'.repeat(100)} `,
`a-${'-'.repeat(100)}`,
`a ${' '.repeat(100)}`,
`a-${'-'.repeat(100)}a`,
`a ${'a '.repeat(100)}`,
`-${'a'.repeat(100)}`,
` ${'a'.repeat(100)}`,
`${'a'.repeat(100)}-`,
`${'a'.repeat(100)} `,
`a-${'a'.repeat(100)}-${'a'.repeat(100)}-`,
`a-${'-'.repeat(100)}`,
`a-${'a-'.repeat(100)}`,
`-${'a'.repeat(100)}`,
`${'a'.repeat(100)}-`,
]
console.log('---- VALID ----');
for (const s of valid)
test(s);
console.log('---- INVALID ----');
for (const s of invalid)
test(s);
function test(str) {
console.log(`${str} ===> ${regex.test(str)}`);
}
\w+(?:-\w+)?
。当你将第二部分设为可选时,这种方式更简单。 - VLAZ