JS Regex:如何替换特定区域内的文本行?

时间:2015-03-11 07:32:16

标签: javascript regex

进行一些文本操作,我需要一个正则表达式,它将在第一组中找到每个缩进行,而不是下面文本的第二组:

First group of lines are below:
- line 1
- line 2
- line 3

Second group of lines are below:
- line 1
- line 2
- line 3

例如,我想插入" A"在数字前面,但仅在第一组中。所以我得到了:

- line A1
- line A2
- line A3

但是第一组中只有 ,即使第二组的线是相同的。只需执行.replace(/^(- \w+ )(\d)/,'\1A\2'即可执行所有行的替换,但我不知道如何将其限制为仅限第一组。

Javascript(或任何其他风格)正则表达式能够做到吗?也就是说,只有当该组前面有一个"定义"时,才能对连续匹配进行操作。匹配

1 个答案:

答案 0 :(得分:1)

首先提取适合替换的文本部分:

 var a_parts
   , s_orig
   , s_final
   , s_sep
   ;

 s_orig = <from_whatever_source>;
 s_sep  = "Second group of lines are below:"; 
 a_parts = s_orig.split(s_sep);
     // Substitute on a_parts[0], leave a_parts[1] untouched.
 s_final =
     a_parts[0].replace(/^(- \w+ )(\d)(.*)/g,'\1A\2')
   + s_sep
   + a_parts[1]
 ;

该方法以直接的方式概括了更多要区别对待的部分。请注意,.split的参数可能是正则表达式,因此您可以指定节分隔符的替换。

这有点类似于定义匹配的概念&#39;引入(通常:分隔)原始字符串的相关部分。