我想匹配一个首字母大写,后跟其他字母字符但没有空格的名称,因此本质上是一个名字,例如:Kevin。
我尝试以下操作似乎无效:
pattern = "([A-Z]\w+)(^\s)"
答案 0 :(得分:1)
您可以简单地将表达式与末尾$
字符绑定,就足够了:
([A-Z][a-z]+)$
如果您想添加更多边界,也可以将其与开始^
字符绑定:
^([A-Z][a-z]+)$
如果需要,您也可以删除捕获组,并且该捕获组仍将匹配。
[A-Z][a-z]+$
您可以在regex101.com中修改/更改表达式。
您可以在jex.im中可视化您的表情:
const regex = /([A-Z][a-z]+)$/gm;
const str = `Kevin`;
const subst = `$1`;
// The substituted value will be contained in the result variable
const result = str.replace(regex, subst);
console.log('Substitution result: ', result);
答案 1 :(得分:1)
答案 2 :(得分:0)
编辑:已更新,以在首字母大写之后包含任何单词字符。
尝试像这样的负面展望:
([A-Z]\w+\b(?!\s))
在上面的示例中,\b
在单词的末尾查找边界,而(?!\s)
如果找到空格,将使正则表达式失败。此答案与接受的答案之间的主要区别在于,当设置了多行标志时,它还会选择换行符并失败。
一如既往,这取决于您的用例。
工作示例:
const matchName = /([A-Z]\w+\b(?!\s))/
console.log(matchName.test("kevin")) // false
console.log(matchName.test("Kevin")) // true
console.log(matchName.test("Kevin ")) // false
console.log(matchName.test("KeVin")) // true
console.log(matchName.test("Kevin\n")) // false