Javascript 查找一个大写字母在一个句点之前的次数

Javascript 查找一个大写字母在一个句点之前的次数,javascript,Javascript,我需要数一数在一个句点之前有多少个字母是大写的。因此,找到每个句点,并检查字符之前,看看它是否是资本 下面是我拼凑的一些代码,我认为可以完成这项工作 var s = 'Washington D.C. is a nice place.'; var counter = 0; var totals = 0; var n = s.indexOf(".",counter); var times = s.split('.').length; var l = n; while(counter != time

我需要数一数在一个句点之前有多少个字母是大写的。因此,找到每个句点,并检查字符之前,看看它是否是资本

下面是我拼凑的一些代码,我认为可以完成这项工作

var s = 'Washington D.C. is a nice place.';
var counter = 0;
var totals = 0;
var n = s.indexOf(".",counter);
var times = s.split('.').length; 
var l = n;
while(counter != times){
  n = s.indexOf(".",l);
  if(s.substring(n-1,1) == s.substring(n-1,1).toUpperCase())
  totals++;
  counter++;
  l = n;
}
//totals should be 2
这对我很有用:

var s = 'Washington D.C. is a nice place.';
var foo = s.match(/[A-Z]\./g,s);
console.log(foo.length);

这对我很有效:

var s = 'Washington D.C. is a nice place.';
var foo = s.match(/[A-Z]\./g,s);
console.log(foo.length);

由@j08691提供的答案是最有效的,但如果您需要一个使用基础知识而不是RegExp的答案(如学校作业或其他),我会选择这样的答案:

此版本统计一个期间之前的所有大写字母

var s = 'Washington D.C. is a nice place.';
var sLower = s.toLowerCase();
var i = 0, num = 0;
while(i < s.length - 1) {
    if(s[i] !== sLower[i] && s[i+1] == '.') {
        num++;
    }
    i++;
}
alert('Upper case: ' + num);
var s='华盛顿特区是个好地方';
var sleer=s.toLowerCase();
var i=0,num=0;
而(i
它在结构上与您拥有的类似,但效率要高得多。也可以修改为使用for循环而不是while

从你的问题中,我不能完全确定你要问的是哪一个,所以这个版本统计字符串中第一个句点之前的所有大写字母:

var s = 'Washington D.C. is a nice place.';
var sLower = s.toLowerCase();
var i = 0, num = 0;
while(i < s.length && s[i] != '.') {
    if(s[i] !== sLower[i]) {
        num++;
    }
    i++;
}
alert('Upper case: ' + num);
var s='华盛顿特区是个好地方';
var sleer=s.toLowerCase();
var i=0,num=0;
而(i
由@j08691提供的答案是最有效的,但如果您需要一个使用基础知识而不是RegExp的答案(如学校作业或其他),我会选择这样的答案:

此版本统计一个期间之前的所有大写字母

var s = 'Washington D.C. is a nice place.';
var sLower = s.toLowerCase();
var i = 0, num = 0;
while(i < s.length - 1) {
    if(s[i] !== sLower[i] && s[i+1] == '.') {
        num++;
    }
    i++;
}
alert('Upper case: ' + num);
var s='华盛顿特区是个好地方';
var sleer=s.toLowerCase();
var i=0,num=0;
而(i
它在结构上与您拥有的类似,但效率要高得多。也可以修改为使用for循环而不是while

从你的问题中,我不能完全确定你要问的是哪一个,所以这个版本统计字符串中第一个句点之前的所有大写字母:

var s = 'Washington D.C. is a nice place.';
var sLower = s.toLowerCase();
var i = 0, num = 0;
while(i < s.length && s[i] != '.') {
    if(s[i] !== sLower[i]) {
        num++;
    }
    i++;
}
alert('Upper case: ' + num);
var s='华盛顿特区是个好地方';
var sleer=s.toLowerCase();
var i=0,num=0;
而(i
PS:你可以将这段代码简化为2或3行,但会是一个不可读的混乱:)PS:你可以将这段代码简化为2或3行,但会是一个不可读的混乱:)