gpt4 book ai didi

javascript - 为什么\b 有时只能与 javascript str.match 一起使用

转载 作者:行者123 更新时间:2023-12-03 04:53:09 25 4
gpt4 key购买 nike

我有一个 JavaScript 函数,它尝试识别一段文本的语言并查看是否与特定语言匹配。

例如,我向函数发送“意大利语”语言,它会尝试查看文本是否包含一定数量的非常常见的意大利语单词。

部分代码如下所示,并且工作得非常好:

switch ( defLanguage ) {
case "Italian":
var foreign_count = str.match(/\b(non|di|che|è|e|la|il|un|a|per|in|una|mi|sono|ho|ma|l'|lo|ha|le)\b/g).length;
break;
case "German":
var foreign_count = str.match(/\b(das|ist|Sie|ich|nicht|die|es|und|der|was|ein|zu|er|in|sie|mir|mit|den|auf|mich)\b/g).length;
break;
}

这会返回foreign_count,它告诉我文本中有多少“外来”单词。

到目前为止,一切都很好。但法语就有问题。

如果我将 \b 单词边界放在可能的单词周围,它将不起作用(即 javascript 从那时起停止)。

var foreign_count = str.match(/\b(le|de|un|à|avec|et|en|je|que|pour|dans|ce|il|qui|ne|sur|se|pas|plus|par)\b/g).length;

但是,如果我删除 \b 那么它就可以工作!

var foreign_count = str.match(/(le|de|un|à|avec|et|en|je|que|pour|dans|ce|il|qui|ne|sur|se|pas|plus|par)/g).length;

这让我陷入困境。 \b 适用于德语和意大利语(以及其他语言)示例,但不适用于法语。我一生都无法弄清楚为什么,显然我需要其中的单词边界,所以我需要解决这个问题。

任何帮助将非常感激!

======更多信息========

这个问题似乎与非 ASCII 字符无关。

这不起作用:

str.match(/\b(jag|det|du|inte|att|en|och|har|vi|i|han|vad|som)\b/g).length;

但这确实:

str.match(/\b(jag|det|du|inte|att|en|och|har|vi|i|han|vad|om)\b/g).length;

似乎某些单词(全部为 ascii 字符)会与\b 标记一起导致错误。我无法使用 (?<=\s|^),因为并非所有帐户都支持 Javascript 中的后向查找。

最佳答案

这是因为 \bdefined :

Matches a word boundary. This is the position where a word character is not followed or preceeded by another word-character, such as between a letter and a space. Note that a matched word boundary is not included in the match. In other words, the length of a matched word boundary is zero.

...以及如何定义单词字符(又名\w):

Matches any alphanumeric character from the basic Latin alphabet, including the underscore. Equivalent to [A-Za-z0-9_].

显然 à 不是单词字符,因此它无法帮助匹配单词边界。

关于javascript - 为什么\b 有时只能与 javascript str.match 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42563235/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com