正则表达式剥离初始和终止字符串并替换字符串

时间:2015-06-25 03:02:28

标签: javascript regex

我有一个可能以一个或多个%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

2 个答案:

答案 0 :(得分:0)

第1步:删除开始和结束的出现

(^(%0D 0A%)+)|((%0D 0A%)+ $)

在javascript中你会写x = x.replace(/(^(%0D%0A)+)|((%0D%0A)+)$/g, '');

步骤2:用逗号

替换组的中间出现次数

^ +(%0D 0A%)+。+ $

答案 1 :(得分:0)

您需要两次替换操作:

  1. 修剪两边的字符串,即用
  2. 替换^(?:%0D%0A)+|(?:%0D%0A)+$
  3. 翻译剩余的匹配项,即将%0D%0A替换为", "
  4. 
    
    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);