我有一个可能以一个或多个%0D%0A
开头的字符串,可能以一个或多个%0D%0A
结尾。我想使用正则表达式从字符串中删除任何%0D%0A
序列。
为了使其复杂化,任何可能的初始或终止%0D%0A
序列之间的ASCII文本也可能包含一个或多个%0D%0A
字符串,需要转换为,%20
(逗号)空间)。
我更喜欢用一个正则表达式来做这个,但是如果它需要两个正则表达式是可以接受的。
例如,对于任何这些字符串:
x=%0D%0A%0D%0A%0D%0Ahello, world%0D%0A%0D%0A
x=%0D%0Ahello, world%0D%0A%0D%0A
x=hello, world%0D%0A
x=hello, world%0D%0A%0D%0A
x=%0D%0A%0D%0Ahello, world
x=%0D%0A%0D%0Ahello%0D%0Aworld%0D%0A
x=%0D%0Ahello%0D%0Aworld%0D%0A%0D%0A
x=hello%0D%0Aworld%0D%0A%0D%0A%0D%0A%0D%0A
我希望输出为:
x=hello, world
这是我到目前为止已经写的去除初始和终止%0D%0A
序列的内容,但它不起作用:
x=((?:%0D%0A)+(.*)|(.*)(?:%0D%0A)+|(?:%0D%0A)+(.*?)(?:%0D%0A)+)
请注意,x=
只是需要保留的任意文本。
更新 我很抱歉;我不想用太多的细节压倒每个人,但缺乏这些细节会导致有用的答案无效。对不起。
我正在做的是使用javascript浏览器扩展,将一个字符串替换为另一个字符串。我可以为扩展提供的是一个匹配的正则表达式模式,以及一个替换输出字符串(使用$ 1,$ 2,$ 3等作为匹配序列)。
例如,如果它收到一串字符串
helloworld
我告诉它用hello.*
替换正则表达式good$1
,
它将输出goodworld
。
答案 0 :(得分:0)
第1步:删除开始和结束的出现
(^(%0D 0A%)+)|((%0D 0A%)+ $)
在javascript中你会写x = x.replace(/(^(%0D%0A)+)|((%0D%0A)+)$/g, '');
步骤2:用逗号
替换组的中间出现次数^ +(%0D 0A%)+。+ $
答案 1 :(得分:0)
您需要两次替换操作:
^(?:%0D%0A)+|(?:%0D%0A)+$
%0D%0A
替换为", "
var x = '%0D%0A%0D%0A%0D%0Ahello, world%0D%0A%0D%0A';
x = x.replace(/^(?:%0D%0A)+|(?:%0D%0A)+$/g, '');
x = x.replace(/%0D%0A/g, ', ');
alert(x);