我需要分割以下文本...
'(!false =>stuff <300^ OR <=200 "TEST DATA")'
有两个规则。我需要保留引用的文本。另外,我需要分割的定界符如下...
{'<', '>', '<=', '=>', '=', '!', '(', ')'}
在这种情况下,我的拆分如下...
['(', '!', 'false', '=>', 'stuff', '<', '300^', 'OR', '<=', '200', '"TEST DATA"', ')']
我已经接近了...
input_text.match(/"[^"]*"|=[<>]|[<>]=|[<>]|[!]|[=]|[()]|\w+/g);
它在大多数情况下都有效,除了一件事之外,不保留诸如^
之类的字符。所以没有得到...
300^
我要...
300
如何保持每个字符串完整无缺,并且只拆分提到的定界符?
答案 0 :(得分:1)
听起来像当您匹配\w+
时,您还想匹配同一匹配的子字符串中的^
,因此创建一个字符集并将^
包含在该字符集中,如下所示:以及\w
:
const input_text = '(!false =>stuff <300$$^300 OR <=200 "TEST DATA")';
console.log(
input_text.match(/"[^"]*"|=[<>]|[<>]=|[<>]|[!]|[=]|[()]|[\w^$]+/g)
// ^^^^^
);
如果除正则表达式的最后替换之外的所有字符都处理所有特殊情况,则另一种选择是代替最终匹配 word (和选定的特殊字符)的字符,您可以匹配< em>除空格字符外的所有字符(如果有匹配项,则初始替换将优先):
const input_text = '(!false =>stuff <300$$^300 OR <=200 "TEST DATA")';
console.log(
input_text.match(/"[^"]*"|=[<>]|[<>]=|[<>]|[!]|[=]|[()]|[^\s]+/g)
// ^^^^^
);