查找大写字母在一段时间之前的次数

时间:2013-10-06 22:11:47

标签: 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 != 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

2 个答案:

答案 0 :(得分:4)

这对我有用:

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

<强> jsFiddle example

答案 1 :(得分:1)

@ 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);

它在结构上与你拥有的相似,但效率更高。也可以修改为使用for循环而不是一段时间。

您的问题并不完全确定您所追求的是什么,因此此版本会计算字符串中第一个句点之前的所有大写字母:

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);