正则表达式在某些字符之前和之后匹配

问题描述

我正在尝试制作一个分隔符正则表达式(与java.util.Scanner一起使用),该分隔符对空格上的字符串进行分段,并将冒号,左括号和右括号作为单独的标记保留下来。也就是说,foo(a:b)应该细分为令牌foo(a:b)。 / p>

我目前的最大努力是模式"\\s+|(?=[(:])|(?<=[:)])",由于某种原因,由于某种原因我无法理解,该模式在左括号之后和右括号之前都不匹配,但是在冒号的两边都很好匹配。

解决方法

如果您需要所有这些单独的部分,则可以扩展字符类,在左侧声明一个字符case,如果是整个字符串,则在以下位置声明一个字符function get_sort(query_order) { switch (query_order) { case 'name_asc': return {name: 1}; case 'name_desc': return {name: -1}; case 'lowprice': return {price: 1}; case 'oldest': return {year: 1}; case 'newest': return {year: -1}; } } ['name_asc','name_desc','lowprice','oldest','newest'].forEach(query_order => { console.log(get_sort(query_order)); });:正确的。

如果您也想匹配最后一个右括号后的位置,则两个字符类可以是相同的[(:)]

[(:]

Regex demo | Java demo

示例代码

[(:)]

输出

\s+|(?=[(:)])|(?<=[(:])