我正在编写一个带有自动完成功能的搜索栏,该功能连接到一个端点。我使用正则表达式来确定在搜索栏中键入查询时我所处的“上下文”。这三个上下文是“属性”、“值”和“操作符”。允许使用的两个操作符是“AND”和“OR”。以下是一个示例查询的示例。
这是我想出来的表达式。
当您在Blue后输入一个空格,并且用户开始输入“A/AN/AND/O/OR”时,我需要我的正则表达式进行匹配。一旦他们在操作符后输入了一个空格,我就需要停止匹配。颜色:蓝色 AND 大小:“女士大号”(<--多个单词的值或属性名称用引号括起来)
这是我想出来的表达式。
const contextIsOperator = /[\w\d\s"]+: *[\w\s\d"]+ [\w]*$/
在"Blue,"之后加上一个空格后可以匹配,但是在"Blue,"之后的任何其他字符都可以匹配。如果将表达式中的最后一个*
替换为+
,那么当我在"Blue"之后放置一个空格并且手动输入其中一个运算符时,它可以工作,但如果只是在"Blue"之后有一个空格,则不能工作。
我脑海中的模式用文字写成如下:
- 一个或多个字符/数字/空格/引号组成的组
- 后跟冒号
- 后跟一个可选空格
- 后跟另一个由一个或多个字符/数字/空格/引号组成的组
- 值后面跟一个空格
- 后面跟一个或多个字符(这是操作符)
我该怎么解决这个问题?
)来包围代码块。对于与非代码位于同一行的内联代码,请在每侧使用单个反引号(
`)。 - CertainPerformance\w
和\d
,因为数字已经包含在\w
中了。 - Barmar