Javascript 用regex nodejs替换可变字符串

Javascript 用regex nodejs替换可变字符串,javascript,node.js,regex,Javascript,Node.js,Regex,我需要在一个非常大的字符串中识别类似于以下内容的模式,并将其替换为“null”: [“pmeta”、[“ImageSelectStoreFront”、null、3、4、2、null、“Storefront”、[]], [“pmeta”、[“/m/01pns0”、空、3、3、空、“消防栓”、[]、空、[1], [“pmeta”、[“/m/0199g”、空、3、3、空、“bicycle”、[]、空、[1]、 这些字符串似乎是JSON,但它们出现的字符串不是JSON,因此解析它毫无意义。我也不需要解析

我需要在一个非常大的字符串中识别类似于以下内容的模式,并将其替换为“null”:

[“pmeta”、[“ImageSelectStoreFront”、null、3、4、2、null、“Storefront”、[]],
[“pmeta”、[“/m/01pns0”、空、3、3、空、“消防栓”、[]、空、[1],
[“pmeta”、[“/m/0199g”、空、3、3、空、“bicycle”、[]、空、[1]、

这些字符串似乎是JSON,但它们出现的字符串不是JSON,因此解析它毫无意义。我也不需要解析这个JSON,我需要从它出现的字符串中删除它

唯一总是相同的部分是
[“pmeta”,
最后是结束括号和逗号

我正在探索正则表达式作为一种可能的解决方案,但我对它完全陌生,还没有找到任何有用的方法


有人能给我一些正则表达式指针或建议其他方法来实现这一点吗?

假设一个字符串中只有一个模式出现,并且没有任何其他出现的
],
那么
\[“pmeta”,..\],
就可以工作了。正则表达式演示:

JavaScript实现:

inputstr='djfhjkdfhkhdhdf[“pmeta”,“ImageSelectStoreFront”,null,3,4,2,null,“Storefront”,“[]],jdkfhkjdhf';
pattern=newregexp('\\[“pmeta”,.\\],',“gm”);

console.log(输入str.replace(模式“”)您可以执行自定义解析,而不是正则表达式。其工作方式如下:

  • 查找输入中是否有以
    [“pmeta”
    开头的内容
  • 将其计算为
    startIndex
  • 通过保留一堆括号来查找索引后最后一个结束括号的索引。为每个打开的括号向堆栈中添加一个元素,为任何结束括号删除一个项目。清空堆栈时,这就是最后一个结束括号。将其计为
    endIndex
  • startIndex
    endIndex
    查找字符串的部分,然后将其替换为
    null
  • 我已通过将长值替换为单个单词来缩短(并匿名)您的样本:

    let input=`]}
    [“rresp”,
    “一个”,
    无效的
    120,
    [“pmeta”,[“/m/01pns0”,空,3,3,3,空,“消防栓”,[]
    ]
    ,null,[1]
    ]
    ,“动态”,空,[“bgdata”,“2”,“3”]
    “四”、“五”]`
    让输出=清洁(输入);
    console.log(“输出”,output);
    函数清除(文本){
    让startIndex=text.indexOf('[“pmeta”);
    //没有要删除的内容-提前退出
    if(startIndex==-1)返回文本;
    让endIndex=findLastopen括号(文本,startIndex);
    让toReplace=text.substring(startIndex,endIndex);
    log(“找到要替换的文本:”,toReplace);
    返回文本。替换(替换为“null”)
    }
    函数findLastopen括号(文本,起始索引){
    让open方括号=[];
    for(设i=startIndex;i}
    解析JSON标题不清楚您想要什么replace@CertainPerformance这实际上对我没有用处。这个JSON显示在一个字符串中,我需要去掉它,而不是解析它。解析JSON->filter->serialise to JSON,这应该会容易得多。编写和维护正则表达式会非常烦人。自定义解析器比较起来会更容易,但比一个简单的解析->过滤->序列化工作要多得多。@Joxrox请在您的问题中添加该细节;评论是临时的,旨在寻求澄清。这与发布在comments@Joxrox但是@VLAZ是真的。我在发布之前没有看到这个粘贴箱。就像我提到的,这个只有在没有出现其他
    ],
    的情况下,正则表达式才有效吗。我也没有想到这个模式可能包含新的行(<代码> 标志将处理它)。非常感谢你的帮助,我将在明天研究这个解决方案-在这里很晚:)一些后来的想法-我刚刚意识到,保持一个堆栈的括号是一个多余的在这里。您可以使用一个计数器
    open括号=0
    执行此操作,并为每个打开的括号递增,为每个关闭的括号递减。我想这会更好,但是,正如我所说的,这个功能还有很多可以改进的地方。它可以推广到任何类型的括号和/或引号。不过,我会保持原样。