进行一些文本操作,我需要一个正则表达式,它将在第一组中找到每个缩进行,而不是下面文本的第二组:
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(或任何其他风格)正则表达式能够做到吗?也就是说,只有当该组前面有一个"定义"时,才能对连续匹配进行操作。匹配?
答案 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;引入(通常:分隔)原始字符串的相关部分。