我有这个正则表达式
/[A-Za-zÀ-ÿ]+/g
匹配由无限长度的字符组成的“单词”。
如果我想排除以大写字母开头的单词?
我试过
/(^[A-Z])[A-Za-zÀ-ÿ]+/g
但它似乎不起作用。不能使用/ w这样的东西,因为它不包括变音符号。
编辑:正在使用的语言是Typescript所以javascript引擎(例如不允许使用lookbehind)很抱歉没有提及。编辑:给出的输入可以是
"foo" //should match foo and return true
"Foo" //should not match foo and return false
"fòo" //should match fòo and return true
" " //should not match foo and return false
"." //should not match foo and return false
"," //should not match foo and return false
代码(Typescript)匹配没有大写字母的东西
isProperWord(word){
/* rejects
- string that are not words (symbols, spaces, etc...)
- names (words starting with a capital letter)
*/
if(word.match(/[A-Za-zÀ-ÿ]+/g)){
return true;
}else{
return false;
}
}
答案 0 :(得分:3)
表达式^[A-Z]
表示匹配行开头的大写字符。您可能尝试键入[^A-Z]
,该字符与A和Z之间不是大写字母的字符匹配,但仍然没有帮助,因为正则表达式引擎会找到与此匹配的字符,并且在线北京。 (例如,一个空间平凡地匹配它 - 它是一个角色,它不在A到Z的范围内。)
如果您使用的词法边界与\b
理解正则表达式,请尝试
/\b[a-z][A-Za-z]*/
匹配左侧有字边界的标记,以及与其相邻的小写字符。 (我忽略了你的语言环境扩展,它不可移植,可能没有明确定义。)
孤立地,/g
标志不做任何事情。如果你有一种语言支持它,并在while
循环或类似的循环中使用正则表达式,它将导致引擎返回字符串中的所有匹配,一次一个,在循环内;但没有进一步的背景,我们不知道这是否真的存在。
答案 1 :(得分:1)
要匹配初始范围内的所有大写字母,您可以使用[A-ZÀ-ÖØ-Þ]
字符类。要匹配所有小写字母[a-zß-öø-ÿ]
。请注意,×
和÷
不是字母,我将其从这些类中删除。
要确保整个字符串仅包含这些字母,并且第一个字符不是大写字母,请使用
/^[a-zß-öø-ÿ][A-Za-zÀ-ÖØ-öø-ÿ]*$/
请参阅regex demo。
JS演示:
var strs = ['foo','fòo','Foo',' ','.',','];
var rx = /^[a-zß-öø-ÿ][A-Za-zÀ-ÖØ-öø-ÿ]*$/;
for (var s of strs) {
console.log(s,"=>",rx.test(s));
}
要提取单词,请使用自定义边界:
var s = 'foo,fòo,Foo';
var rx = /(?:[^A-Za-zÀ-ÖØ-öø-ÿ]|^)([a-zß-öø-ÿ][A-Za-zÀ-ÖØ-öø-ÿ]*)(?![A-Za-zÀ-ÖØ-öø-ÿ])/g;
var m, res=[];
while(m=rx.exec(s)) {
res.push(m[1]);
}
console.log(res);