在模式上拆分字符串

Posted

技术标签:

【中文标题】在模式上拆分字符串【英文标题】:Split a string on a pattern 【发布时间】:2011-04-15 02:32:22 【问题描述】:
   var a="##55##data1!!##66##data4545!!##77##data44!!";

如何删除##664545##data!!从字符串

编辑:如果我们知道字符串中的起始值,即##66##和结束值,即!!

在主字符串中如何删除从开始模式开始的字符,开始模式之后直到结束模式的数据

      My expected output will be ##55##data1!##77##data44!!

【问题讨论】:

这无助于回答您的问题,但您可能想查看 JSON。这是一种将数据作为字符串传输的方式,可以避免这种混乱。 能详细点吗?也许尝试放 fewbefore/after 关系的例子。现在的事情和预期的事情。明确的问题会得到明确的答案。承诺! 这到底是什么主题?今天有更多人问了几乎相同的问题。 ;) @Reigel - 如果你可以引用这些,也许这应该作为重复关闭。 【参考方案1】:

使用 javascript 和正则表达式 -

a.replace(/##66##[a-zA-Z0-9]*!!/g,"") 

如果你想参数化它,那么你可以按照下面给出的开始和结束是你的参数-

    var a = "##55##data1!!##66##data4545!!##77##data44!!";
    var start = "##66##";
    var end = "!!";

    var re = new RegExp(start + "[a-zA-Z0-9]*" + end, "g");

    return a.replace(re,"");

【讨论】:

@Sachin:如果数据发生变化,如何替换? 我认为问题在于如何从字符串中提取数据项 66,而不管“数据”中包含什么。 @Hulk 你可能想编辑你的问题并更清楚地表达它 @Hulk - 编辑后的问题仍然没有提供有关所需内容的任何信息。它有点混乱。如果它是关于从给定的字符串中提取数据 66,则应该有一个明确的模式,您需要在问题中告诉我们您可以从中提取数据。您是否想获取包含在 ## 和 ## 内的所有数据或类似的东西。 @Sachin:Excellet answer.Thanks【参考方案2】:

正则表达式方式,使用全局标志g 捕获所有匹配项:

a.replace(/##66##data!!/g,"")

【讨论】:

我认为您误解了这个问题,它是关于解析字符串以获取项目##66## 的“数据”值。 如果数据变成字符串say"abcdfeg",如何替换? @fredley - 我不认为这很清楚。它明确表示删除,听起来像是基于动态值的删除,但它可以被承认是提取。 @Hulk - 如果data 是一个动态值,您可以允许一般匹配(用.*? 替换数据),或者您可以在您正在寻找的显式值上动态构建正则表达式为。

以上是关于在模式上拆分字符串的主要内容,如果未能解决你的问题,请参考以下文章

根据字符串的不同模式拆分字符串[重复]

BigQuery:拆分具有重复模式的字符串以分隔行

根据两个不同的条件拆分一列字符串(具有不同的模式)

C# 正则表达式拆分为 Java 模式拆分

针对任意多个分隔符拆分字符串

H2 - 服务器模式下的拆分文件选项