[問題] 取代引號中的特定字串

看板RegExp (正規表示式 Regular Expression)作者 (かえで)時間3年前 (2021/10/06 08:56), 3年前編輯推噓8(807)
留言15則, 5人參與, 最新討論串1/1
/* 聽說註明使用的語言、環境 * 問題有可能較容易被解決... */ 環境是用 POWERSHELL 跑 文本是整份檔案,這邊擷取一部分作範例 文檔.js if ( a || b) { var SQL = "select abc || abc"; } 目的是把整份檔案的 || 改成 + 但是直接修的話連 IF 的判斷也會動到 所以需要判斷只修引號內的字串 想要的結果 if ( a || b) { var SQL = "select abc || abc"; } 目前查到的只能把引號內容抓出來,不知道怎麼進一步塞選出字串|| $ct -replace '(?<=").*?(?=")', '+' -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 126.216.106.98 (日本) ※ 文章網址: https://www.ptt.cc/bbs/RegExp/M.1633481805.A.1FB.html ※ 編輯: hunandy14 (126.216.106.98 日本), 10/06/2021 09:56:23

10/08 00:25, 3年前 , 1F
powershell不能用||吧?還是新版可以了我不確定。
10/08 00:25, 1F

10/08 00:26, 3年前 , 2F
再把if換回來 哈哈哈
10/08 00:26, 2F

10/08 00:26, 3年前 , 3F
想到一個方法是你先把if(a||b)換成別的字串,然後換||,
10/08 00:26, 3F

10/08 00:28, 3年前 , 4F
再把if換回來 哈哈哈 (上面漏推第二行直接跳到第三行了
10/08 00:28, 4F

10/08 00:30, 3年前 , 5F
(沒看到是.js文檔 第一行是我會錯意了)
10/08 00:30, 5F
但是我不能確保只有if這個規則是錯的,這只是一個舉例還有其他情況是 substr( -> substring( 這時候要分辨的是如果是javascript中的 "變數.substr(" 就不能修 在人工修的情況下,我能確保不出錯的規則是在vscode裡面綠色的字體 一定是我要修改的目標,綠色的字體是被 "" 包住後整串變綠的

10/08 13:03, 3年前 , 6F
一般來說這會需要抓「在字串裡的 ||」然後用 backref 代換
10/08 13:03, 6F

10/08 13:03, 3年前 , 7F
不過我不太確定 powershell 能不能做到這種代換...
10/08 13:03, 7F
不知道是什麼,我試著找看看 目前有bug勉強能用的代碼長這樣,BUG點在沒辦法判斷"是開頭還是結尾 if (a=="" || b=="") 中間的也會被替換 https://gist.github.com/hunandy14/f10d73d3ddaa2b0cb7daf863a06ff943

10/10 16:21, , 8F
'(?<=").*?\|\|.*?(?=")' 試看看
10/10 16:21, 8F

10/10 16:21, , 9F
'(?<=").*?(\|\|).*?(?=")' 忘了要替換了 XD
10/10 16:21, 9F
原來要加括號...我測好久都不行,用了個笨方法分三次抓。

10/10 21:09, , 10F

10/10 22:41, , 11F
若有類似樓上的例子,左邊 .*? 要改成排除左括號 [^(]*?
10/10 22:41, 11F

10/10 22:42, , 12F
右邊 .*? 排除右括號 [^)]*? 看看
10/10 22:42, 12F
測試了一下好像也是不行,測試的範文在上面網址裡。還有什麼好方法嗎

10/13 21:30, , 13F
引號中的||編到有命名的group裡面 就可以存取該group
10/13 21:30, 13F
能再具體一點說明嗎 ※ 編輯: hunandy14 (126.216.106.98 日本), 10/20/2021 16:40:23

10/23 09:08, , 14F
如果是要替換 sql 引號內的||,那不如直接寫 sql = 較明確
10/23 09:08, 14F

10/23 09:12, , 15F
sql=".+?(\|\|).+?(\|\|).+?" 這句可以針對你給的那個新例子
10/23 09:12, 15F
文章代碼(AID): #1XNFHD7x (RegExp)
文章代碼(AID): #1XNFHD7x (RegExp)