我试图根据一些限制创建一个正则表达式,并且我已经使用了一些有用的资源来尝试&测试一下。我知道我需要一个锚($)来检查字符串的结尾,但我想我误解了应该放置锚的位置。
我知道/([A-Za-z0-9' ])\w+/
会给我我想要的内容,因为它包含字母数字+空格+撇号字符,但我如何确保它只以字母数字结尾?
答案 0 :(得分:1)
你所拥有的基本上是说"给我一个字母数字,撇号或空格,而不是任何数量的单词"。它也可以在任何地方,因此您的字符串也可以包含其他字符。根据您的描述,这可能不是您想要的。
我想你可能想要这个:
/^([A-Z0-9' ]+)(?:[A-Z0-9])$/i
这说"只给我字母数字,撇号或空格,并确保最后有一个字母数字"。我拿出了小写字母并添加了i
(不区分大小写)标记,但您也可以将其切换为其他方式。
(?:[A-Z0-9])
是一个不匹配的集合,用于检查以确保此处有字母数字。由于它最后会在$
旁边碰到,这意味着它必须直接位于字符串的末尾。您还需要一个^
,以确保您的整个字符串符合此条件,而不仅仅是其中的一部分。
以下是一个例子:
const pattern = /^([A-Z0-9' ]+)(?:[A-Z0-9])$/i;
['This should work', "This'll also work", "This won't'"].forEach(s =>
console.log(s, pattern.test(s))
);