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

JavaScript在多个分隔符上拆分并保留带引号的文本

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

    我有下面的绳子。。。

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

    我想知道如何保存引用的文本使用以下。。。

    test.match(/\w+|"[^"]+"/g)
    

    但是,输出不是我想要的。。。

    [ 'false', 'stuff', '300', 'OR', '200', '"TEST DATA"' ]
    

    我需要保存一个符号列表。。。

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

    所以我的分裂应该如下。。。

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

    我该如何添加到 match 保存以下内容的函数?我不太擅长 regex .

    1 回复  |  直到 8 年前
        1
  •  1
  •   anubhava    8 年前

    您可以使用:

    let str = '(!false >=stuff 300 OR 200 "TEST DATA")'
    
    let arr = str.match(/"[^"]*"|[<>]=|[^\w\s]|\w+/g)
    
    console.log(arr)
    //=> ["(", "!", "false", ">=", "stuff", "300", "OR", "200", ""TEST DATA"", ")"]

    Regex有以下替代方案:

    • "[^"]*" :匹配带引号的字符串
    • [<>]= :匹配 <= 或 >=
    • [^\w\s] :匹配任何非空格、非字字符
    • \w+ :匹配任意单词