javascript - 如何匹配 "something":"thestring"模式?

标签 javascript regex

注意:我更改了问题的标题以及所有对 JSON 的引用,以便问题更好地反射(reflect)我的问题。我多次收到“迭代对象比在序列化版本上工作更好”的建议,但我相信(并且肯定是错误的)在字符串中搜索定义明确的模式比迭代或递归代码更容易迭代一个对象

我需要从字符串中提取模式 "something":"thestring"

源字符串会有很多其他的组合比如"something":[{"thestring":{"key":18,"anotherkey":"astring"}}],从中仅搜索 "anotherkey":"astring" 对。

我特别感兴趣的是获取值的内容,即第一个示例中的 thestring(以及第二个示例中的 astring)。

我尝试匹配 ".*?","(.*?)" 但我得到的不仅仅是这对,匹配引号后的逗号(并且它从那里走下坡路) .

测试字符串的示例和我失败的测试在 Regex101

最佳答案

我会这样写:

function extractStrings(obj) {
    var stringSet = [];
    function extractStringsHelper(obj) {
        if (typeof obj === 'string' && stringSet.indexOf(obj) === -1) {
            stringSet.push(obj);
        } else if (typeof obj === 'array') {
            for (var i=0; i<obj.length; i++) {
                extractStringsHelper(obj);
            }
        } else if (typeof obj === 'object' && obj !== null) {
            for (var key in obj) {
                if (obj.hasOwnProperty(key)) {
                    extractStringsHelper(obj[key]);
                }
            }
        }
    }
    extractStringsHelper(obj);
    return stringSet;
}

> extractStrings({'a': "strA", 'b': ["strB1", 1, "strB2", {'n': "strC"}]})
> (4) ["strA", "strB1", "strB2", "strC"]

您也可以使用正则表达式查找:

"[^"]+":"([^"]+)"

这是您使用修改后的正则表达式的示例:https://regex101.com/r/uxS9k0/2

但这条路是黑暗的,充满了恐怖。例如,如果字符串包含转义双引号,它就会中断。一旦开始考虑所有可能的情况,您基本上就是在重写 JSON 分词器。

关于javascript - 如何匹配 "something":"thestring"模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45573038/

相关文章:

javascript - 是否可以通过添加链接样式表在 nextjs 项目中使用 bootstrap 4?

javascript - 从 javascript 获取非内联 css

regex - 如何在正则表达式中允许一个空格

regex - 如何在 RPM 规范文件中使用正则表达式?

python - 正则表达式匹配两个词后的所有内容

javascript - 构造函数的属性会发生什么情况?

Javascript:使用 FileSaver.js 将文本/blob 保存到文件中

javascript - React添加/删除事件监听器

javascript - "console.log(phi(tableFor("花生牙", JOURNAL)))"有什么作用?

java - 您能解释一下 Java 正则表达式中的这个命名组起始位置吗?