[英]Regex split only on certain characters
我需要分割以下文本...
'(!false =>stuff <300^ OR <=200 "TEST DATA")'
有兩個規則。 我需要保留引用的文本。 另外,我需要分割的定界符如下:
{'<', '>', '<=', '=>', '=', '!', '(', ')'}
在這種情況下,我的拆分如下:
['(', '!', 'false', '=>', 'stuff', '<', '300^', 'OR', '<=', '200', '"TEST DATA"', ')']
我已經接近了...
input_text.match(/"[^"]*"|=[<>]|[<>]=|[<>]|[!]|[=]|[()]|\w+/g);
它在大多數情況下都起作用,除了一件事之外,不保留諸如^
類的字符。 所以沒有得到...
300^
我得到...
300
如何保持每個字符串完整無缺,並且只拆分提及的分隔符?
聽起來像當您匹配\\w+
,您還想要匹配同一匹配的子字符串中的^
,因此創建一個字符集並在該字符集中包含^
以及\\w
:
const input_text = '(!false =>stuff <300$$^300 OR <=200 "TEST DATA")'; console.log( input_text.match(/"[^"]*"|=[<>]|[<>]=|[<>]|[!]|[=]|[()]|[\\w^$]+/g) // ^^^^^ );
如果正則表達式的除最后一個以外的所有字符都處理了所有特殊情況,那么另一個選擇是, 除了最后一個匹配單詞 (和選定的特殊字符)的字符外,您還可以匹配除空格字符之外的任何其他字符 (初始替換將采用優先級(如果有)):
const input_text = '(!false =>stuff <300$$^300 OR <=200 "TEST DATA")'; console.log( input_text.match(/"[^"]*"|=[<>]|[<>]=|[<>]|[!]|[=]|[()]|[^\\s]+/g) // ^^^^^ );
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.