如何使用正则表达式找到一个单词?

时间:2017-11-01 18:26:20

标签: regex

我正在创建一个以自然语言为输入的机器人。例如,我希望在用户的输入中找到“árbol”或“c​​arbó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

最后,是否有一种更简单的方法可以考虑所有突出的单词,而不是只放两种情况?

2 个答案:

答案 0 :(得分:2)

使用字边界\b代替\s,这也会检查第一个/最后一个字符。

  

匹配单词边界。单词边界匹配单词字符未被跟随或前面有另一个单词字符的位置。请注意,匹配中不包括匹配的字边界。换句话说,匹配的字边界的长度为零。 (不要与[\ b]混淆。)

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions#special-word-boundary

答案 1 :(得分:0)

我的代码的整个解决方案是:

/\b(á+|a+)rb(o+)l\b|\bc(a+)rb(ó+|o+)n\b/i