正则表达式匹配<br/>后跟一个新行和一个数字

时间:2012-07-24 06:43:23

标签: javascript regex

我想用javascript分割一个段落,如果我在段落里面有<br />后跟换行符和数字。

这是段落的例子:

aaaaaa aaaaa aaaaa aaaaa aaaa <br />
1   bbbb bbbbb bbbbb bbbb bbb <br />
2   cccc ccccc ccccc cccc ccc <br />
*   dddd ddddd ddddd dddd ddd <br />

我希望有一个包含3个元素的数组:

1.  aaaaaa aaaaa aaaaa aaaaa aaaa <br />
2.  1   bbbb bbbbb bbbbb bbbb bbb <br />
3.  2   cccc ccccc ccccc cccc ccc <br />
    *   dddd ddddd ddddd dddd ddd <br />

我试过这个:

<br \/>\d

但是由于新线我认为这不起作用。

非常感谢你的帮助。

2 个答案:

答案 0 :(得分:1)

您应该尝试http://txt2re.com/正则表达式。它非常好,可以帮助你生成正则表达式。

("aaaaaa aaaaa aaaaa aaaaa aaaa <br />\r\n\
1   bbbbbbbbbbb <br />\r\n\
2   cccc ccccc ccccc cccc ccc <br />\r\n\
3   dddd ddddd ddddd dddd ddd <br />")
    .split(/\s*([\d|\*]+.+<br[^>]*>)[\r|\n|\r\n]\s*/gmi) 
                                      // criteria filtering
    .join('\r\n')                     // removing the last empty element (2nd) after split
    .replace(/\r\n\r\n/gmi,'\r\n')    // remove double line breaks
    .split(/\r\n/);                   // split again

答案 1 :(得分:1)

假设字符串存储在名为str的变量中,则以下内容应该起作用:

str.split(/<br \/>$[\s\S]^(?=\d+)/m)

我用过:

  • 多行模式(/m),允许$匹配一行的结尾,^匹配下一行的开头。
  • 一个javascript正则表达式技巧,可以匹配任何字符,包括新行:[\s\S],详细here
  • 一个positive lookahead,以确保新行后面的内容是数字:(?=\d+)。但是,它不包含在匹配中,因此不会从字符串中删除数字。

编辑:这将从列表中除最后一个元素之外的所有元素中删除<br />。由于我现在想不出更好的方法,你可以使用类似的东西重新添加它们:

var parts = str.split(/<br \/>$[\s\S]^(?=\d+)/m);
var final = [];
for (var i = 0; i < parts.length - 1; i++) {
    final.push(parts[i] + '<br />');
}
final.push(parts[parts.length - 1]);

不理想,但似乎对我有用。