所以我试图创建一个正则表达式来替换字符串之后的行。
var code =
if('this' == 'this')
alert('hello');
alert('hello');
以上是变量中的代码。它来自某个地方,并没有在js文件中定义,所以请原谅我,如果我没有正确地将它定义为变量(这是我在变量中的代码示例)。
Beneath是我需要工作的正则表达式,并附有解释。但它不起作用。我无法弄清楚如何使它发挥作用。
code = code.replace /(^\s*)(if\(.*$)(\n|$)(^$1\s.*\n|$|\z)/gm, '$1$2 {$3$4\n$1}'
所以RegEx是这样的:
(^\s*)
- 从该行的开头,获取所有空格(通常是标签页)
(if\(.*$)
- 从'中获取内容,如果'声明,直到行尾
(\n|$)
- 获取行的结尾
(^$1\s.*\n|$|\z)
- 获取与if语句一致的所有行,其中包含与(^ \ s *)(由$ 1定义)相同数量的空格,加上一行更多的空白。然后选择行的末尾或变量的其余部分。
在'$1$2 {$3$4\n$1}'
- 首先是空格($ 1)和if语句($ 2),然后是' {',比换行符($ 3),然后是下一行($ 4),然后新行+与开头相同数量的空格,然后'}' ($ 5)
编辑:
由于某些原因,此代码无效,并且未在if语句行之后选择。我正在尝试其他组合,我得到的最好的是在if语句之后只选择一行(不多于一行)。
错误出现在第4节(4美元)。 问题是在if语句之后选择所有需要的内容。
预期结果:
if('this' == 'this') {
alert('hello');
alert('hello');
}
答案 0 :(得分:2)
试试这个正则表达式:
(^\s+)(if\(.*)([\n]+\1(\s+.*)+)
将匹配替换为:
\1\2{\3\n\1}
<强> Click for Demo 强>
<强>解释强>
(^\s+)
- 在每行的开始处匹配1个以上的空格并将其捕获到第1组(if\(.*)
- 匹配if(
后跟除换行符之外的任何字符的0次出现,并将整个内容存储在第2组中([\n]+\1(\s+.*)+)
- 将此整体捕获为第3组。请参阅下面的说明
[\n]+
- 匹配1行以上的换行符。这是在if
声明之后。\1
- 匹配在第1组中捕获的任何内容。(达到if
语句的相同缩进级别)\s+
- 匹配1个以上的空格,以确保我们将1级移动到if
语句的缩进(我希望有意义).*
- 匹配除换行符之外的任何字符的0次出现(\s+.*)+
- 上述2个子序列出现1次以上