我正在尝试修复一些regex,我有一个用于lita的chatops机器人。我有以下正则表达式:
/^(?:how\s+do\s+I\s+you\s+get\s+far\s+is\s+it\s+from\s+)?(.+)\s+to\s+(.+)/i
这应该捕获'到'之前和之后的单词,前面的可选单词可以形成如下问题:如何从x到y,从x到y有多远,如何远离它是从x到y。
预期产出:
match 1 : "x"
match 2 : "y"
在大多数情况下,我的可选单词按预期工作。但是当我拉回我的回应时,我会得到包含第一个捕获组的字样。
所以,how far is it from sfo to lax
应该返回:
sfo
和lax
。
但是返回:
how far is it from sfo
和lax
答案 0 :(得分:3)
你的小故障是你的正则表达式的第一块没有意义。
要从多个选项中进行选择,请使用以下语法:
(a|b|c)
我认为你要做的是:
/^(?:(?:how|do|I|you|get|far|is|it|from)\s+)*(.+)\s+to\s+(.+)/i
正则表达式表示跳过多个选项中的所有单词,无论顺序如何。
如果要保留单词顺序,可以使用此伪代码等正则表达式:
… how (can|do|will) (I|you|we) (get|go|travel) from …
答案 1 :(得分:1)
如果您想匹配字,\w
是我使用的最自然的模式(例如,它用于字数工具。)
使用(\w+\sto\s+\w*)
正则表达式捕获“to”之前和之后的任何1个单词。
要将它们作为2个不同的组返回,您可以使用(\w+)\s+to\s+(\w+)
。
查看demo。