Javascript正则表达式可以消除匹配单词之间的混乱

时间:2012-01-03 14:17:28

标签: javascript regex

我想删除彼此相邻的一些单词之间的空格,我该如何实现?

Cosider以下:

str = "Z =A= =B= =C= =D= Z";
str = str.replace(/(=\w+=)\s+(=\w+=)/g, "$1$2");

我希望"Z =A==B==C==D= Z"(所有匹配都加在一起),但我得到"Z =A==B= =C==D= Z"=B==C=之间的空格)=A= + {{ 1}}被视为匹配,=B= + =C=也被认为是=D= + =B=,因为=C=已经与=B=匹配

我应该如何改写我的正则表达式来实现它?

更新

我正在使用的实际匹配是“mime-words”,例如=A=,我用于计算这些匹配的正则表达式为=?ISO-8859-1?B?dGVzdA==?=

我想在字符串中删除这些mime词出现之间的空格,例如

/=\?[^?]+\?[QqBb]\?[^?]+\?=/

应该成为

str= "hello =?ISO-8859-1?B?dGVzdA==?= =?ISO-8859-1?B?aG93?= =?ISO-8859-1?B?YXJlIHlvdQ==?=?"

2 个答案:

答案 0 :(得分:1)

为什么不在第一次替换后添加这样的另一个替换语句:

str = str.replace(/(=\w+==\w+=)\s+(=\w+==\w+=)/g, "$1$2");

更新:我认为这可以简单地在一个简单的正则表达式中完成:

str= "hello =?ISO-8859-1?B?dGVzdA==?= =?ISO-8859-1?B?aG93?= =?ISO-8859-1?B?YXJlIHlvdQ==?=?";
str = str.replace(/= =/g, "==");

<强>输出

hello =?ISO-8859-1?B?dGVzdA==?==?ISO-8859-1?B?aG93?==?ISO-8859-1?B?YXJlIHlvdQ==?=?

答案 1 :(得分:1)

使用积极向前看:

str= "hello =?ISO-8859-1?B?dGVzdA==?= =?ISO-8859-1?B?aG93?= =?ISO-8859-1?B?YXJlIHlvdQ==?=?"
res = str.replace(/(=\?[^?]+\?[QqBb]\?[^?]+\?=)\s+(?==\?[^?]+\?[QqBb]\?[^?]+\?=)/g, "$1");

<强>输出:

"hello =?ISO-8859-1?B?dGVzdA==?==?ISO-8859-1?B?aG93?==?ISO-8859-1?B?YXJlIHlvdQ==?=?"