正则表达式找不到包含瑞典字母的两个字母单词

Regex not finding two letter words that include Swedish letters

所以我对 Regex 很陌生,我设法创建了一种方法来检查字符串中是否存在特定单词,而不仅仅是另一个单词的一部分。

示例: 我在找“香蕉”这个词。 香蕉 == 真,bananarama == 假

这一切都很好,但是当我在查找包含瑞典字母 (Å,Ä,Ö) 的单词和仅包含两个字母的单词时出现问题。

示例: 我正在寻找字符串中的单词“på”,如下所示:“på påsk” 结果是负面的。 但是,如果我寻找“påsk”这个词,它就会返回正数。 这是我正在使用的正则表达式:

const doesWordExist = (s, word) => new RegExp('\b' + word + '\b', 'i').test(s);
stringOfWords = "Färg på plagg";
console.log(doesWordExist(stringOfWords, "på"))
//Expected result: true
//Actual result: false

但是,如果我将单词“på”更改为三个字母的单词,那么它会返回 true:

const doesWordExist = (s, word) => new RegExp('\b' + word + '\b', 'i').test(s);
stringOfWords = "Färg pås plagg";
console.log(doesWordExist(stringOfWords, "pås"))
//Expected result: true
//Actual result: true

我一直在四处寻找答案,我发现了一些与瑞典字母有类似问题的答案,none 其中 none 实际上只查找完整的单词。 谁能解释一下我做错了什么?

word boundary \b strictly depends on the characters matched by \w, which is a short-hand character class [A-Za-z0-9_]

要获得类似的行为,您必须重新实现其功能,例如:

const swedishCharClass = '[a-zäöå]';
const doesWordExist = (s, word) => new RegExp(
    '(?<!' + swedishCharClass + ')' + word + '(?!' + swedishCharClass + ')', 'i'
).test(s);

console.log(doesWordExist("Färg på plagg",  "på"));  // true
console.log(doesWordExist("Färg pås plagg", "pås")); // true
console.log(doesWordExist("Färg pås plagg", "på"));  // false

对于更复杂的字母表,我建议您看一下 Concrete Javascript Regex for Accented Characters (Diacritics)