代码之家  ›  专栏  ›  技术社区  ›  buydadip

正则表达式只对某些字符进行拆分

  •  0
  • buydadip  · 技术社区  · 6 年前

    我有下面的文字需要分开。。。

    '(!false =>stuff <300^ OR <=200 "TEST DATA")'
    

    有几个规则。我需要保留引用的文本。另外,我需要拆分的分隔符如下。。。

    {'<', '>', '<=', '=>', '=', '!', '(', ')'}
    

    在这种情况下,我的分歧如下。。。

    ['(', '!', 'false', '=>', 'stuff', '<', '300^', 'OR', '<=', '200', '"TEST DATA"', ')']
    

    我已经接近了。。。

    input_text.match(/"[^"]*"|=[<>]|[<>]=|[<>]|[!]|[=]|[()]|\w+/g);
    

    它在大多数情况下都是有效的,除了一件事,比如 ^ 没有保存。所以与其。。。

    300^
    

    我只是。。。

    300
    

    如何保持每个字符串的完整性,并且只拆分所提到的分隔符?

    1 回复  |  直到 6 年前
        1
  •  1
  •   CertainPerformance    6 年前

    听起来像是你配的 \w+ ,您还想匹配 ^ 在同一个匹配的子字符串中,因此创建一个字符集并包含 ^ 在那个角色集中,以及 \w :

    const input_text = '(!false =>stuff <300$$^300 OR <=200 "TEST DATA")';
    console.log(
      input_text.match(/"[^"]*"|=[<>]|[<>]=|[<>]|[!]|[=]|[()]|[\w^$]+/g)
      //                                                      ^^^^^
    );

    如果除了正则表达式的最后一个选项之外,所有的特殊情况都由正则表达式处理,那么另一个选项是to,而不是matching 单词 最后,您可以匹配 除了空白字符 (如有匹配,则以最初的更改为准):

    const input_text = '(!false =>stuff <300$$^300 OR <=200 "TEST DATA")';
    console.log(
      input_text.match(/"[^"]*"|=[<>]|[<>]=|[<>]|[!]|[=]|[()]|[^\s]+/g)
      //                                                      ^^^^^
    );