我正在创建一个以自然语言为输入的机器人。例如,我希望在用户的输入中找到“árbol”或“carbón”字样。
它必须不区分大小写并且不区分重音。它必须在句子的任何地方找到单词。
示例:
arbol - (应检测)
caRbóN(应该检测到)
Carboooon - (应该检测到)
ÁRBOL - (应检测)
当我想要检测句子中的单词时,就会出现问题。以下情况不得发生:
Esoesunárbol(不应该检测)
arbola - (不应该检测)
使用正则表达式我有以下内容:
/(á+)rb(o+)l|c(a+)rb(ó+)n|(a+)rb(o+)l|c(a+)rb(o+)n/i
我知道我必须使用\s
来获得空间,但是当我尝试这个时:
/(\s)(á+)rb(o+)l|c(a+)rb(ó+)n|(\s)(a+)rb(o+)l|c(a+)rb(o+)n/i
如果我有,例如,它没有检测到这个词:
ARBOL
我只会检测到
un arbol
最后,是否有一种更简单的方法可以考虑所有突出的单词,而不是只放两种情况?
答案 0 :(得分:2)
使用字边界\b
代替\s
,这也会检查第一个/最后一个字符。
匹配单词边界。单词边界匹配单词字符未被跟随或前面有另一个单词字符的位置。请注意,匹配中不包括匹配的字边界。换句话说,匹配的字边界的长度为零。 (不要与[\ b]混淆。)
答案 1 :(得分:0)
我的代码的整个解决方案是:
/\b(á+|a+)rb(o+)l\b|\bc(a+)rb(ó+|o+)n\b/i