3 回答

TA貢獻1725條經驗 獲得超8個贊
您可以為全部*和添加一些惰性量詞+。并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" )
添加回答
舉報