亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Javascript RegEx惰性匹配

Javascript RegEx惰性匹配

郎朗坤 2021-05-09 16:39:21
我正在嘗試使用以下正則表達式方式在JavaScript代碼中查找循環模式,并替換語法(從:到in),var str="for(var x in []) for(var y in [])";str.replace( new RegExp( '(for\\s*\\(.+\\s+):(\\s+.+\\))', 'ig' ), "\$1in\$2" )IEfor(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 }}我試圖探索懶惰的正則表達式語法,但無法使其正常工作。我怎樣才能做到這一點?
查看完整描述

3 回答

?
qq_遁去的一_1

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"));


查看完整回答
反對 回復 2021-05-20
?
倚天杖

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'))


查看完整回答
反對 回復 2021-05-20
?
aluckdog

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" )


查看完整回答
反對 回復 2021-05-20
  • 3 回答
  • 0 關注
  • 226 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號