3

我正在使用正则表达式来过滤一些内容。

var word = new RegExp(filterWord,"gi");// "gi" means Global and insensitive
content = content.replace(word, "");//removes "word" from content

此代码可以正常工作,但是当正则表达式获取大写“İ”时,它不会替换单词。

例如:如果

filterWord = istanbul 

content = "İstanbul";

上面的代码不能正常工作,如果我把 istanbul 写到 İstanbul,它可以工作,但这次它不是不敏感的,我该如何解决这个问题?

4

3 回答 3

3

您可以在括号中表示小写和大写

/[İi]伊斯坦布尔/我

你可以从这里看到

于 2017-07-04T10:12:10.513 回答
2

regEx如何与小写和大写字符一起使用基于字符的十六进制代码以及它们在该 Unicode 集的 Unicode 联盟中的表示方式(任何语言,我希望 Unicode 基于国际标准)。

例如:对于英语

英语

同样,我们有

土耳其

上面是一些用相同颜色突出显示的字符,它们自己的大写和小写表示,它们的十六进制代码只有一个区别。对于Ê Hex-Code 是00CA并且对于ê00EA第三个位置有一个 差异CE。

同样对于 Ýý 十六进制代码是00DDu00FD有一个差异DF

现在检查这个,例如:

'ÊÌÝêìý'.match(/Ì/gi) //case insensitive
//output ["Ì", "ì"]
'ÊÌÝêìý'.match(/Ì/g) //case sensitive
//output ["Ì"]

'ÊÌÝêìý'.match(/Ý/ig) //case insensitive
//output ["Ý", "ý"]
'ÊÌÝêìý'.match(/Ý/g) //case sensitive
//output ["Ý"]

如果您使用正确的字符,那么它应该可以正常工作。我不太了解拉丁土耳其语字符。

于 2014-05-31T03:56:26.500 回答
1

这是Unicode字符的主题。

发生的情况是,i在您的示例中不是单个字母而是 2,因为波浪号也算作一个字符。这带来了许多复杂性和需要遵循的规则才能满足 Unicode 规则。

您可以执行以下操作:([\x{0049}-\x{0130}])满足您的i需求,但此表达式可能会有所不同,具体取决于您是否要在 .net、java、javascript 或 php 上使用此表达式。

*在线演示*

您还可以在此处检查每个字符代表的代码:

http://www.fileformat.info/info/unicode/char/search.htm?q=%C4%B0&preview=entity

于 2014-05-31T00:11:59.347 回答