我正在编写一个带有连接到端点的自动完成功能的搜索栏。我正在使用正则表达式来确定我在搜索栏中键入的查询中的“上下文”。这三个上下文是“属性”、“值”和“运算符”。允许使用的两个运算符是“AND”和“OR”。以下是示例查询的示例。
在 Blue 后面放一个空格后,我需要我的正则表达式匹配,如果用户开始输入“A/AN/AND/O/OR”,我需要它匹配。一旦他们在操作符后面放了一个空格,我就需要它来停止匹配。
这是我想出的表达方式。
const contextIsOperator = /[\w\d\s"]+: *[\w\s\d"]+ [\w]*$/
一旦我在“Blue”后面放一个空格,它就会匹配,但匹配我在这之后放的所有东西。如果我将表达式中的最后一个
*
替换为 +,那么当我在“Blue”之后放置一个空格并开始手动键入其中一个运算符时它会起作用,但如果我在“Blue”后面只有一个空格则不起作用。我脑子里用文字写的模式是:
我该如何解决这个问题?
最佳答案
将 [\w]*
更改为与 AND
、 OR
或它们的前缀之一匹配的内容。然后你可以用 ?
使它成为可选的
[\w\s"]+: *[\w\s"]+ (A|AN|AND|O|OR)?$
DEMO
请注意,
Size: Women's Large
与此不匹配,因为撇号不在 \w
中;只匹配字母、数字和下划线。您需要将您希望在这些字段中允许的任何其他标点符号添加到字符集。关于javascript - 用于自动完成功能的 RegEx,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56369234/