急!js 字符串如何提取相应的值

let str = "(16,#FFFFFF)你好" //需要提取出16、#FFFFFF、你好
let str = "(17,#0a0a0a)我很好" //需要提取出17、#0a0a0a、我很好

格式如上所示,括号里为数字和颜色,括号外为文字,我需要分别提取出数字,颜色和文字!

最终输出结果为

let fontSize = "16"
let color = "#FFFFFF"
let font = "你好"

let fontSize = "17"
let color = "#0a0a0a"
let font = "我很好"

请教大神们我该如何操作!真的挺急的,我愿意有偿解决,如果解决可以私我给V我发红包感谢!


如果可以的话,我还有个更进阶的问题:

我想用if来判断,判断str里是否有"("和"#",
如果都有的话则进行提取,如果没有则无视:

let str = "(16,#FFFFFF)你好" //同时存在"("和"#",需要提取出16、#FFFFFF、你好
let str = "你好"     //没有"("和"#",不需要做任何操作
let str = "(我)你好"     //只有"(",不需要做任何操作
let str = "#你好"  //只有"#",不需要做任何操作
阅读 1.8k
2 个回答
const source = [
    "(16,#FFFFFF)你好",
    "(17,#0a0a0a)我很好",
    "你好",
    "(我)你好",
    "#你好"
];

const result = source.map(s => {
    const r = /\((\d+),(#[\da-f]{6})\)(.*$)/i;
    //        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    //        这个正则是关键
    const m = s.match(r);
    return m
        ? {
            fontSize: m[1],
            color: m[2],
            font: m[3]
        }
        : s;
});

console.log(result);

输出

[
  { fontSize: '16', color: '#FFFFFF', font: '你好' },
  { fontSize: '17', color: '#0a0a0a', font: '我很好' },
  '你好',
  '(我)你好',
  '#你好'
]
var eg =  "(17,#0a0a0a)我很好".match(/(\d+(?!=\()).*(#[a-f|\d]{6})\)(.*)/);
eg[1] //"17"
eg[2] //"#0a0a0a"
eg[3] //"我很好"
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题