3 回答

TA贡献1725条经验 获得超7个赞
您可以为全部*和添加一些惰性量词+。并for由于匹配而将其作为替换的一部分。
var str = "for(var x : []) for(var y : [])";
console.log(str.replace(/for\s*?(\(.+?\s+?):(\s+?.+?\))/ig, "for $1in$2"));
短一点,它包括for在第一组中。
var str = "for(var x : []) for(var y : [])";
console.log(str.replace(/(for\s*?\(.+?):(.+?\))/ig, "$1in$2"));

TA贡献1828条经验 获得超3个赞
除了使用懒惰的量词,您还可以使用取反的字符集,因为它们的效果更好,并且可以使用此正则表达式,
(for\s*\([^:]+):([^)]+\))
并替换为
$1 in $2
另外,您不必使用它,.+\\s+
因为这是多余的,您可以编写.+?
,甚至可以更好地使用否定字符集,以使其更快地工作,并且类似地:
可以在编写后使用\\s+.+
,.+?
但是再次使用否定字符类是更好的选择,就像我提到的那样在我的回答中。
这可能导致你进入问题的另一点是,你不应该使用这个\$1in\$2
更换,而是使用$1 in $2
首先你不需要逃避$
的\$
,其次,因为如果你的for循环是这样的,for(var x:list)
即不必冒号和周围之间的空间变量,那么您可能获得的替换输出for(var xinlist)
将使其无效。这就是为什么我在回答上述建议,以取代$1 in $2
使in
在其两侧的空间。
JS代码,
const s = `for(var x : list)
{
// something
}
for(var x : list) { for(var y : list) {
// something
}
}`
console.log(s.replace(/(for\s*\([^:]+):([^)]+\))/g, '$1 in $2'))

TA贡献1847条经验 获得超7个赞
可以使用“?
后”量词来实现懒惰行为。
const str = "for(var x : list) { for(var y : list) {" str.replace( new RegExp( '(for\\s*?\\(.+?\\s+?):(\\s+.+\\))', 'ig' ), "\$1in\$2" )
顺便提一句。JavaScript RegEx文字更容易阅读:
str.replace( /(for\s*?\(.+?\s+?):(\s+.+\))/ig, "\$1in\$2" )
添加回答
举报