如何用正则表达式提取转义引号间数据并生成JSON对象?
用正则提取转义引号间的内容(附更优方案)
嘿,我懂你想绕开循环、用正则来提取这些被转义引号包裹的内容的需求!不过先插一句——如果你的输入本身是合法的JSON格式字符串,其实有个比正则简单靠谱得多的方法,我先给你讲这个,再满足你要的正则方案~
优先推荐:直接用JSON.parse解析
你的输入本质就是一个JSON数组字符串,原生的JSON.parse完全能直接处理转义字符,一步到位得到数组:
var string = "[\"1\",\"2\",\"Example\",\"Hello world\",\"5\"]"; var obj = JSON.parse(string); console.log(obj[0]); // 输出 1 console.log(obj[1]); // 输出 2 console.log(obj[2]); // 输出 Example console.log(obj[3]); // 输出 Hello world console.log(obj[4]); // 输出 5
这个方法不仅代码简洁,还能处理各种复杂的转义场景(比如内容里包含\"、\n这类转义字符),比正则更安全可靠。
正则方案:提取转义引号间的内容
如果你确实想用正则实现,这里有个能处理内容中转义字符的正则表达式,搭配exec循环来提取所有匹配的内容:
var string = "[\"1\",\"2\",\"Example\",\"Hello world\",\"5\"]"; // 匹配被双引号包裹的字符串,支持内容中的转义字符 const quoteRegex = /"([^"\\]*(?:\\.[^"\\]*)*)"/g; const result = []; let match; // 循环提取所有捕获到的内容 while ((match = quoteRegex.exec(string)) !== null) { result.push(match[1]); } console.log(result[0]); // 输出 1 console.log(result[2]); // 输出 Example console.log(result[3]); // 输出 Hello world
正则说明:
":匹配字符串开头的双引号(原字符串里的\"在JS中会被解析为普通双引号,所以正则里直接写"即可)([^"\\]*(?:\\.[^"\\]*)*):核心捕获组,用来匹配引号内的内容:[^"\\]*:匹配任意不是双引号也不是反斜杠的字符,零次或多次(?:\\.[^"\\]*)*:非捕获组,匹配转义字符(比如\"、\t),之后再跟非引号/反斜杠的字符,确保内容里的转义不会被误判为字符串结束
":匹配字符串结尾的双引号g:全局匹配标志,确保能找到所有符合条件的内容
不过还是要提醒一句:如果你的输入是标准JSON,尽量用JSON.parse,正则只适合处理非标准的、简单的字符串场景哦~
内容的提问来源于stack exchange,提问作者bbdd
相关产品推荐
相关产品推荐

