正则表达式找不到包含瑞典字母的两个字母单词
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)。
所以我对 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)。