问题描述
我正在尝试制作一个分隔符正则表达式(与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));
});
:正确的。
如果您也想匹配最后一个右括号后的位置,则两个字符类可以是相同的[(:)]
[(:]
示例代码
[(:)]
输出
\s+|(?=[(:)])|(?<=[(:])