不敏感的事件反击 - JS

问题描述 投票:-1回答:1

我有一个在字符串中寻找子字符串的出现计数器,但它区分大小写。我的实际代码是:

count = (string.match(new RegExp(substring, 'gm')) || []).length;

例如,如果字符串包含子字符串一次但具有更多重音,则计数将等于“0”。

有没有办法创建一个不区分大小写的计数器?

javascript counter
1个回答
0
投票

您可以使用toLowerCase()或使用标志i将两个字符串转换为小写(但请记住this)。对于重音,不幸的是你必须将它单独替换为基本字符串:

var string = "AÁáéíóú";

var substring = "AAaeiou";

var r = new RegExp("")

string = string.replace(/Á|É|Í|Ó|Ú/gi, function(m){
    if(m=="á") return "a"
    if(m=="é") return "e"
    if(m=="í") return "i"
    if(m=="ó") return "o"
    if(m=="ú") return "u"

    if(m=="Á") return "a"
    if(m=="É") return "e"
    if(m=="Í") return "i"
    if(m=="Ó") return "o"
    if(m=="Ú") return "u"
})

var count = (string.match(new RegExp(substring, 'gmi')) || []).length;

console.log(count)

如果你还ñ,你必须单独改变它。

您也可以使用.normalize(),但在IE中不起作用

var string = "AÁáéíóú";

var substring = "AAaeiou";

var r = new RegExp("")

string = string.normalize('NFD').replace(/[\u0300-\u036f]/gi, "")

var count = (string.match(new RegExp(substring, 'gmi')) || []).length;

console.log(count)
© www.soinside.com 2019 - 2024. All rights reserved.