【发布时间】:2026-02-11 11:40:01
【问题描述】:
我正在尝试在 javascript 代码中查找 for 循环模式,并使用以下正则表达式替换语法(从:到 in),
var str="for(var x in []) for(var y in [])";
str.replace( new RegExp( '(for\\s*\\(.+\\s+):(\\s+.+\\))', 'ig' ), "\$1in\$2" )
即
for(var x : list)
{
// something
}
与
for(var x in list)
{
// something
}
但是,当同一行中有多个 for 循环时,我会遇到问题。
for(var x : list) { for(var y : list) {
// something
}
}
这是有效的语法,但是由于贪婪的正则表达式方法,它转换如下:
for(var x : list) { for(var y in list) {
// something
}
}
我尝试探索惰性正则表达式语法,但无法使其工作。我怎样才能做到这一点?
【问题讨论】:
-
正则表达式不适合处理嵌套结构。我可以让它适用于当前场景,但是当你有更多的嵌套模式时,它通常仍然会失败。
-
你不能像
str.split(':').join(' in ')那样做吗?或者您只想将其作为 for 循环的一部分? -
Icepickle,不,因为 ':' 以多种方式使用,即对象 ==> var objectA = {'A','Apple','B':'Banana'};跨度>
-
@PushpeshKumarRajwanshi 我该如何处理这个问题?使用递归匹配?或者任何其他可能的方式?
-
@Pratik: 添加为answer 请检查。
标签: javascript regex regex-greedy