字符串转换二维数组?

已知字符串let str = "[('channel_id', '=', 1), ('state', '=', 'published')]"

转换成二维数组

let arr = [
    ['channel_id', '=', 1],
    ['state', '=', 'published']
]

求一个可以转换的方法或者逻辑

阅读 1.9k
2 个回答

先用replace把括号替换一下,然后用Function转成数组

new Function('return '+str.replace(/\(/g,'[').replace(/\)/g,']'))()

image.png

如果不能使用Function的话,那就需要转成标准的JSON,在上一步的基础上把单引号转成双引号

JSON.parse(str.replace(/\(/g,'[').replace(/\)/g,']').replace(/\'/g,'"'))

image.png

const str2arr = str => {
    let str1;
    const res = [];
    
    const reg = RegExp('\\(.*?\\)', 'g');
    while ((str1 = reg.exec(str)) !== null) {
        res.push(str1[0].match(/(\w+|=)/g))
    }
    return res;
}
str2arr("[('channel_id', '=', 1), ('state', '=', 'published')]")

image.png

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏