localeCompare 无法匹配文本是否包含单引号

localeCompare unable to match if the text includes single quote

提问人:Mikkel Fennefoss 提问时间:11/7/2023 最后编辑:Mikkel Fennefoss 更新时间:11/13/2023 访问量:38

问:

我目前正在开发一个 Photoshop 插件,它可以遍历每个 textLayer 中的所有文本。

然后,我尝试将该文本与包含相同文本的电子表格中的数据进行匹配。由于电子表格包含多种语言的数据,因此可以使用完整的功能轻松地遍历文本图层并将其翻译成不同的市场。

因此,我首先感兴趣的是将文本图层上的英文文本与电子表格中的英文文本行进行比较,以便能够确定我是否有该特定文本的任何翻译。

我正在使用 localCompare,您匹配两个不同的文本。

目前,当我使用以下条件来确定文本是否匹配时。

if (textLayer.localeCompare(translationText, 'en', { sensitivity: 'base' }) === 0) {
    console.log(textLayer + translationText[l][0] + ' %c !Matches! ', 'background: #222; color: #bada55');
}

在我的控制台中,我得到以下结果:

The Gift EditThe Gift Edit  !Matches!
We got just the right styles for you.We got just the right styles for you.  !Matches!

这也是我所期望的,但是一旦我有包含单引号的文本,我就没有得到任何匹配,如下例所示:

Haven't bought this year's gifts yet? Do not worry. Haven't bought this year's gifts yet? Do not worry. 

我尝试使用localCompare的灵敏度,但我无法弄清楚正确的设置是什么。有谁知道这是如何实现的。如果我需要澄清更多,请告诉我。

!编辑! 根据评论中的要求,我试图举一个更清楚的例子,通过这样做,我想我弄清楚了错误是什么。似乎其中一个文本包含一个断线,而另一个则没有。请看这个 codepen 作为示例:

https://codepen.io/fennefoss/pen/BaMpeaO?editors=1111

如果删除变量“a”中的隔断线,则文本将匹配。我怎样才能做一个忽略中断线的两个文本的组合?

JavaScript 字符串比较

评论

2赞 VLAZ 11/7/2023
你确定报价是问题所在吗?可能的空格或零宽度字符呢?角色是完全相同的,而不是看起来相同的吗?
2赞 samuei 11/7/2023
不要将您的示例添加为评论。编辑原始帖子。
2赞 Pointy 11/7/2023
@MikkelFennefoss,你就不需要制作一个Codepen;StackOverflow (基本上)内置了一个 Codepen 工具。
2赞 Pointy 11/7/2023
嗯,一个有换行符,另一个没有。是什么让您认为问题与引号字符有关?
3赞 Pointy 11/7/2023
没有允许折叠或忽略空格字符的选项。您可以在比较之前从字符串中去除空格。.localeCompare()

答:

1赞 Mikkel Fennefoss 11/13/2023 #1

我最终通过使用正则表达式在比较字符串之前删除隔断线来修复文本中隔断线的问题。控制台在记录文本时没有显示断线,这有点误导,将来需要注意。

let sanitizedTextItem = str.replace(/(?:\r\n|\r|\n)/g, '');