美好的一天,
我想知道是否可以使用 RegExp ,如果可以,如何使用。
问题在于:
在字符串中,我有多个与颜色对应的图案:
{r for dark red
{R for bright red
{G for bright green
{W for white
{* for black
... and so on...
有时我正在解析的数据包含很多无用的颜色变化 例如:
{r{Gthis text is finally green
{r
在那里完全无用。如果字符串是{rSomething {Gthis text is finally green
我想要一种方法来匹配任何其他{<color references>
之前的{<color references>
,并留下最后一个{r{Gthis text is green
。
{Gthis text is green
- &gt; That text is {R{rdark red
That text is {rdark red
- &gt; {Y{r{Gthis te{*xt {Y{yis green
这是一种简单的方法吗?
我知道这个问题非常特别,可能永远不会帮助其他任何人。
但帮助真的很感激。
谢谢!
PS:代码用于 Javascript ,所以如果可能的话,我想要一个在Javascript中运行的解决方案。
修改
我必须能够{Gthis te{*xt {yis green
并获得{{1}}
答案 0 :(得分:1)
这是一种有效的方法。它的工作原理如下:
{
,后跟除{
之外的任何其他单个字符。如果只允许一组指定的颜色代码,或者有更多字符不允许使用颜色代码,那么这些代码也可以添加到正则表达式中,但是您没有指定其他信息。\{[^\{]
。这是一个{
,后跟任何不是{
的单个字符。如果您希望它只是字母字符,则可以将其更改为:\{[a-zA-Z]
。{{
。这适用于颜色代码中的任何字符,因为您看起来有一长串有效的单字符代码。但是,它可以防止{{它不会被视为颜色代码。
var str = "{r{G{ythis text is finally green";
var result = str.replace(/(\{[^\{])+(\{[^\{])/g, "$2");
或者只允许字母字符作为颜色代码字符,就是这样:
var result = str.replace(/(\{[a-zA-Z])+(\{[a-zA-Z])/g, "$2");
你可以在这里看到一个测试小提琴:http://jsfiddle.net/jfriend00/jNXUz/
答案 1 :(得分:0)
var foo = "{r{Gthis text is green".replace(/^{(.+){/, '{');
console.log(foo);
答案 2 :(得分:0)
在我的脑海中,我会使用像([\{a-zA-Z]{2})([{A-Za-z\ ]+)
这样的正则表达式,然后你将删除第1组,或者只提取第2组。
我给出的正则表达式并不尽可能简洁,但这取决于你做得更好,更能满足你的需求。尝试使用像regex buddy这样的东西来帮助进一步开发。
答案 3 :(得分:0)
如果你想在你的字符串中允许{
,如果它没有跟随你的一个特殊字符,请使用此项:
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"
答案 4 :(得分:0)
您可以搜索一个颜色代码紧跟另一个颜色代码的位置,然后删除第一个颜色代码,如下面的代码所示:
// 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,"{");
答案 5 :(得分:0)
您可以这样做:http://jsfiddle.net/BdWt5/
var patterns = {
r:function(a){
// dark red implementation
return '<span style=color:red>'+a+'</span>';
},
G:function(a){
// green implementation
return '<span style=color:green>'+a+'</span>';
}
};
var str = '{rTesting{GTesting}}',match;
while(match = str.match(/{([^{}]+)}/)){
str=str.replace(match[0],patterns[match[1].slice(0,1)](match[1].slice(1)))
}