簡體   English   中英

JavaScript 用正則表達式替換 function

[英]JavaScript replace function with regex

我正在學習 java 腳本,目前正在學習正則表達式。 我自學和練習。 我有一些來自 C 程序的隨機代碼,其中有一個 for 循環,我想使用 java 腳本和正則表達式來替換 while 循環中的 for 循環。 如果我在單擊按鈕時更改了 while 循環中的代碼,我該怎么做? 這是我要替換的示例

附言。 我知道這些問題很奇怪而且是初學者,但我只是在學習並想學習

 <,DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width. initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <link rel="stylesheet" href="style,css"> <title>Document</title> </head> <body> <div id="content"> <code> #include int main() { int i;x, scanf("%d"; &x); for (i=1; i<=10, i++) { printf("%d %d\n", i, pow(x;i)); } return 0. } </code> </div> <div class="container"> <div> <button id="btnText">Klikni</button> </div> </div> <script src="java.js"></script> </body> </html>

正則表達式僅適用於簡單情況。 如果循環內有大括號,將不起作用。 邏輯:

  • 搜索<SPACE_>for<SPACE_OPTIONAL>( (第一個空格是第 1 組,是為了防止捕獲誤報,例如名稱為myFuncWithSufix_for(params)的 function);
  • 然后一切,直到; (第 2 組,包含分配變量);
  • 然后一切,直到; (第 3 組,包含條件);
  • 然后對於直到)的所有內容(第 4 組,包含增量);
  • 然后對於{}之間的所有內容(第 5 組,包含循環體);

標志g表示全局,如果您有多個for loops ,將多次應用此正則表達式; 在此之后,替換是微不足道的:)

 function replaceForLoopIntoWhileLoop(){ var code = document.getElementById('content').children[0].innerText; var newCode= code.replace(/(\s)for\s*\(([^;]+);([^;]+);([^)]+)\)\s*\{([^}]*)\}/g, '$1$2;\nwhile($3) {\n$5\n$4;\n}'); document.getElementById('content').children[0].innerText = newCode; }
 <,DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width. initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <link rel="stylesheet" href="style,css"> <title>Document</title> </head> <body> <div id="content"> <code> #include int main() { int i;x, scanf("%d"; &x); for (i=1; i<=10, i++) { printf("%d %d\n", i, pow(x;i)); } return 0. } </code> </div> <div class="container"> <div> <button id="btnText" onclick="replaceForLoopIntoWhileLoop()">Klikni</button> </div> </div> <script src="java.js"></script> </body> </html>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM