0

我需要计算句号之前有多少个大写字母。所以找到每个句号并检查之前的字符是否为大写。

这是我拼凑起来的一些代码,我认为它们可以完成这项工作。

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
4

2 回答 2

4

这对我有用:

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

jsFiddle 示例

于 2013-10-06T22:19:46.633 回答
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 循环而不是 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);
于 2013-10-06T22:36:04.650 回答