在JavaScript中检测字符串中的阿拉伯字符数量

4
我知道如何在字符串中检测阿拉伯字符。
var arabic = /[\u0600-\u06FF]/;
var string = 'عربية‎';
var flag = arabic.test(string); // flag is true in this case

我想知道如何检测字符串中阿拉伯字符的总数?

关于关闭。OP问如何检测阿拉伯字符的数量,而不是特定地使用/ regexp /? - user13500
2个回答

3

正则表达式替代方法

var arabic = /[\u0600-\u06FF]/g, // <--- g=Match global (all)
    string = 'مرحبا';
    count  = string.split(arabic).length - 1);

// Or
var match = string.match(arabic);
count = match ? match.length : 0;

循环替代方案以提升性能

如果性能很重要,您也可以使用循环:

function count(string){ 
    var char, i, len = string.length, count = 0;
    for (i = 0; i < len; ++i)
        if ((char = string.charCodeAt(i)) >= 0x600 && char <= 0x6ff)
            ++count;
    return count;
}

在一些快速的JSPerf测试中,循环版本对于短字符串的性能大约提高了30倍,对于长字符串(7000个字符)的性能则提高了10倍。不同浏览器之间会有所差异。


0
你可以这样做:
var string = 'ربية';
function isArabic(char){
    var pattern = new RegExp(/[\u0600-\u06FF]/);
    return pattern.test(char);
}

function count(string){ 
    var count = 0;
    for (var i = 0; i< string.length; i++){
        if (isArabic(string.charAt(i))){
            count++;
        };
    };
    return count;
}

这里是代码片段: http://jsfiddle.net/Goodluck/Gt64t/


2
为什么这么复杂?此外,永远不要在正则表达式字面量上使用 new RegExp() - Bergi
1
你只需要使用 string.match(/[\u0600-\u06FF]/g).length - Derek 朕會功夫

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接