3 回答

TA貢獻(xiàn)1725條經(jīng)驗(yàn) 獲得超8個(gè)贊
您可以為全部*和添加一些惰性量詞+。并for由于匹配而將其作為替換的一部分。
var str = "for(var x : []) for(var y : [])";
console.log(str.replace(/for\s*?(\(.+?\s+?):(\s+?.+?\))/ig, "for $1in$2"));
短一點(diǎn),它包括for在第一組中。
var str = "for(var x : []) for(var y : [])";
console.log(str.replace(/(for\s*?\(.+?):(.+?\))/ig, "$1in$2"));

TA貢獻(xiàn)1828條經(jīng)驗(yàn) 獲得超3個(gè)贊
除了使用懶惰的量詞,您還可以使用取反的字符集,因?yàn)樗鼈兊男Ч?,并且可以使用此正則表達(dá)式,
(for\s*\([^:]+):([^)]+\))
并替換為
$1 in $2
另外,您不必使用它,.+\\s+
因?yàn)檫@是多余的,您可以編寫.+?
,甚至可以更好地使用否定字符集,以使其更快地工作,并且類似地:
可以在編寫后使用\\s+.+
,.+?
但是再次使用否定字符類是更好的選擇,就像我提到的那樣在我的回答中。
這可能導(dǎo)致你進(jìn)入問題的另一點(diǎn)是,你不應(yīng)該使用這個(gè)\$1in\$2
更換,而是使用$1 in $2
首先你不需要逃避$
的\$
,其次,因?yàn)槿绻愕膄or循環(huán)是這樣的,for(var x:list)
即不必冒號(hào)和周圍之間的空間變量,那么您可能獲得的替換輸出for(var xinlist)
將使其無效。這就是為什么我在回答上述建議,以取代$1 in $2
使in
在其兩側(cè)的空間。
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貢獻(xiàn)1847條經(jīng)驗(yàn) 獲得超7個(gè)贊
可以使用“?
后”量詞來實(shí)現(xiàn)懶惰行為。
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" )
添加回答
舉報(bào)