Javascript 除了最后一个带有正则表达式的模式外,如何删除重复的模式?
你好 我想知道是否可以使用RegExp实现,如果可以,如何实现 问题是: 在一个字符串中,我有多个与颜色对应的图案:Javascript 除了最后一个带有正则表达式的模式外,如何删除重复的模式?,javascript,regex,Javascript,Regex,你好 我想知道是否可以使用RegExp实现,如果可以,如何实现 问题是: 在一个字符串中,我有多个与颜色对应的图案: {r for dark red {R for bright red {G for bright green {W for white {* for black ... and so on... 有时,我正在解析的数据包含很多无用的颜色变化 例如: {r{g此文本最终为绿色 var foo = "{r{Gthis text is green".replace(/^{(.+){/,
{r for dark red
{R for bright red
{G for bright green
{W for white
{* for black
... and so on...
有时,我正在解析的数据包含很多无用的颜色变化
例如:
{r{g此文本最终为绿色
var foo = "{r{Gthis text is green".replace(/^{(.+){/, '{');
console.log(foo);
{r
在那里是完全无用的。如果字符串是{rSomething{g,那么它就不会了。这个文本最终是绿色的
var foo = "{r{Gthis text is green".replace(/^{(.+){/, '{');
console.log(foo);
我想找到一种方法来匹配在任何其他{
之前的每个{
,并保留最后一个
{r{g此文本为绿色
->{g此文本为绿色
那文本是{R{rdark red
->那文本是{rdark red
这样做容易吗
我知道这个问题非常特殊,可能永远也帮不了别人
但我真的很感激你的帮助
谢谢大家!
PS:这些代码用于Javascript,因此如果可能,我希望有一个使用Javascript的解决方案
编辑:
我必须能够在我的头顶上做这个te{*xt{Y{Y{Y{Y{Y}是绿色的,然后得到这个te{*xt{Y{Y{Y}是绿色的,然后我会使用类似于
([\{a-zA-Z]{2})([{a-zA Z\]+)
var foo = "{r{Gthis text is green".replace(/^{(.+){/, '{'); console.log(foo);
我给出的正则表达式不够简洁,但这取决于您如何更好、更具体地满足您的需求。请尝试使用类似于正则表达式buddy的东西来帮助进一步的开发。如果您想在字符串中也允许,如果它后面没有一个特殊字符,请使用此选项:{
var patts = ['\\{r', '\\{R', '\\{G', '\\{W', '\\{\\*']; var str = '{r{GThis is a green string'; var patt = '(?:'+patts.join('|')+')'; str = str.replace(new RegExp(patt+'('+patt+')', 'g'), '$1'); // str === "{GThis is a green string"
您可以搜索一个颜色代码后面紧跟着另一个颜色代码的位置,并删除第一个颜色代码,如以下代码所示:// if you want to list out all possible codes "{r{Gthis text is finally green".replace(/{[rRGW\*]{/g,"{"); // if you want a generic any character after bracket match "{r{Gthis text is finally green".replace(/{.{/g,"{");
下面是一个有效的方法。它的工作原理如下:
{
,后跟除{
之外的任何其他单个字符。如果只有一组指定的颜色代码是您想要允许的,或者有更多的字符是不允许的颜色代码,那么这些字符也可以添加到正则表达式中,但您没有指定其他信息\{[^\{]
。这是一个{
,后跟任何不是{
的单个字符。如果希望它仅为字母字符,可以将其更改为:\{[a-zA-Z]
{{
var str = "{r{G{ythis text is finally green";
var result = str.replace(/(\{[^\{])+(\{[^\{])/g, "$2");
或者只允许alpha字符作为颜色代码字符,应该是这样的:
var result = str.replace(/(\{[a-zA-Z])+(\{[a-zA-Z])/g, "$2");
您可以在此处看到测试小提琴:您可以这样做:
var模式={
r:功能(a){
//深红色实现
返回“+a+”;
},
G:职能(a){
//绿色实施
返回“+a+”;
}
};
var str='{rTesting{GTesting}}',匹配;
而(match=str.match(/{([^{}]+)}/){
str=str.replace(匹配[0],模式[match[1]。切片(0,1)](匹配[1]。切片(1)))
}
您尝试过什么(换句话说,发布到目前为止的Javascript)这几乎可以正常工作。但是当使用:{Y{r{g这个te{*xt{Y{yis green
->{yis green