获取一个字符在JavaScript中的出现次数

Get number of occurrences of a character in JavaScript

本文关键字:JavaScript 字符 一个 获取      更新时间:2023-09-26

我有一个字符串,它使用','来设计一些数据。现在我想计算','在该字符串中的出现次数。我试过了:

var match = string.match('/[,]/i');

但如果我试图获得匹配数组的长度,这将使我为null。有什么想法吗?

如果需要将简单模式的出现情况检查为",那么最好不要使用正则表达式。

尝试:

var matchesCount = string.split(",").length - 1;

删除引号并添加g标志:

var str = "This, is, another, word, followed, by, some, more";
var matches = str.match(/,/g);
alert(matches.length);    // 7

jsfiddle在这里:http://jsfiddle.net/jfriend00/hG2NE/

这个要点声称regexp是最有效的技术。

编辑: 然而,Job在评论中提供的性能基准表明split技术现在更快了。所以我现在建议你这么做。

但无论如何,如果您使用regexp方法,您应该注意,如果没有匹配项,那么String::match()将返回null,而不是您所期望的空数组:

> 'foo'.match(/o/g)
[ 'o', 'o' ]
> 'foo'.match(/o/g).length
2
> 'foo'.match(/x/g)
null
> 'foo'.match(/x/g).length
TypeError: Cannot read property 'length' of null

处理这个问题的一个简单方法是,如果结果为null,则替换一个空数组:

var count = (string.match(/,/g) || []).length;

或者这可以避免创建空数组,但需要两行代码:

var match = string.match(/,/g);
var count = match ? match.length : 0;

计算Javascript 中正则表达式的匹配数

您需要/g全局标志

编辑:我不需要下面的"记号"。

var count = string.match(/,/g).length; 

这会给出null,因为'/[,]/i'不是正则表达式。如MDN中所述,如果将非正则表达式传递给string.match,则将使用new Regex(obj)将其转换为正则表达式。

您想要的是传递实际的regex对象/[,]/i(或简称/,/i(。"1,2,3".match(/,/i)在匹配方面将如您所期望的那样工作。

然而,正如Cybernate所指出的,正则表达式对于这类问题来说是过分的。更好的解决方案是拆分字符串:

var str = "1,2,3,4,5";
var len = str.split(",").length - 1;
function get_occurrence(varS,string){//Find All Occurrences
    c=(string.split(varS).length - 1);
    return c;
}
string="Hi, 1,2,3";
console.log(get_occurrence(",",string));

使用get_occurrence(varS,string(查找字符串中字符和字符串的出现。

使用以下代码从语句中使用","划分一些数据:

 var str = "Stack,Overflow,best,for,coder"    
 var matchesCount = str.split(",").length;
 var vallueArray = str.split(',', matchesCount);
 var value1= "";
 for (var i = 0 ; i < vallueArray.length; i++) {
         value1= value1+ vallueArray [i] + " ";
    }
  document.getElementById("txt1").value = value1;