捕获并替换多行字符串中出现的前N个模式

时间:2018-07-02 07:39:28

标签: javascript regex

我有以下字符串,我希望从中将<br>的前两次出现替换为\n字符。

<br><br><br>. Do not replace <br> here.
1. One
2. Two
3. Three<br><br><br>End of List. Replace first two <br> with \n
New line follows.
<br><br><br>. Do not replace <br> here.

我确实写了我的正则表达式here。我对regex非常陌生,我敢肯定这不是一个优化的解决方案。 经过一些尝试,我能够选择<br><br>作为捕获组。 我希望这个第三个捕获组成为我的选定匹配,因此我可以轻松地用\n替换它。 有人可以帮我弄这个吗?

我的预期输出是:

<br><br><br>. Do not replace <br> here.
1. One
2. Two
3. Three\n<br>End of List. Replace first two <br> with \n
New line follows.
<br><br><br>. Do not replace <br> here.

var str = `1. One
2. Two
3. Three<br><br><br>End of List
New line follows
`

console.log(
  str.match(/[\n\r].*(\d\.\s+)(?!.*[\n\r](\d\.\s+)).*((<br\s*\/?>){2})/)
);  

4 个答案:

答案 0 :(得分:1)

怎么样:

const initialString = `1. One
2. Two
3. Three<br><br><br>End of List
New line follows
`;
console.log(initialString.replace(/<br>?<br>/g, "\n\n"));

// or do you mean:
console.log(initialString.replace(/<br>?(<br>){1,}/g, "\n\n"));

答案 1 :(得分:1)

也许这个正则表达式可以帮助您:

/(?:(([0-9])+.([\w]| ))*)<br><br>/g

它指出要匹配的字符串必须以数字开头,后跟。和一些文字,然后是您的图案

。使用?:您将创建一个非捕获组,因此仅替换

希望这会有所帮助。

var str = `1. One
2. Two
3. Three<br><br><br>End of List
New line follows
`;

console.log(str.replace(/(?:(([0-9])+.([\w]| ))*)<br><br>/g, '\n'));

答案 2 :(得分:1)

尝试一下。

VS

答案 3 :(得分:0)

我认为这应该对您有用:

str.replace(/ <\ br> <\ br> / g,'\ n');