在模式上拆分字符串
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。这是一种将数据作为字符串传输的方式,可以避免这种混乱。 能详细点吗?也许尝试放 few 个 before/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
是一个动态值,您可以允许一般匹配(用.*?
替换数据),或者您可以在您正在寻找的显式值上动态构建正则表达式为。以上是关于在模式上拆分字符串的主要内容,如果未能解决你的问题,请参考以下文章