作者hunandy14 (かえで)
看板RegExp
标题[问题] 取代引号中的特定字串
时间Wed Oct 6 08:56:43 2021
/*
听说注明使用的语言、环境
*
问题有可能较容易被解决...
*/
环境是用 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://webptt.com/cn.aspx?n=bbs/RegExp/M.1633481805.A.1FB.html
※ 编辑: hunandy14 (126.216.106.98 日本), 10/06/2021 09:56:23
1F:推 Tabrith: powershell不能用||吧?还是新版可以了我不确定。 10/08 00:25
2F:→ Tabrith: 再把if换回来 哈哈哈 10/08 00:26
3F:→ Tabrith: 想到一个方法是你先把if(a||b)换成别的字串,然後换||, 10/08 00:26
4F:→ Tabrith: 再把if换回来 哈哈哈 (上面漏推第二行直接跳到第三行了 10/08 00:28
5F:→ Tabrith: (没看到是.js文档 第一行是我会错意了) 10/08 00:30
但是我不能确保只有if这个规则是错的,这只是一个举例还有其他情况是
substr( -> substring(
这时候要分辨的是如果是javascript中的 "变数.substr(" 就不能修
在人工修的情况下,我能确保不出错的规则是在vscode里面绿色的字体
一定是我要修改的目标,绿色的字体是被 "" 包住後整串变绿的
6F:推 LPH66: 一般来说这会需要抓「在字串里的 ||」然後用 backref 代换 10/08 13:03
7F:→ LPH66: 不过我不太确定 powershell 能不能做到这种代换... 10/08 13:03
不知道是什麽,我试着找看看
目前有bug勉强能用的代码长这样,BUG点在没办法判断"是开头还是结尾
if (a=="" || b=="") 中间的也会被替换
https://gist.github.com/hunandy14/f10d73d3ddaa2b0cb7daf863a06ff943
8F:推 art1: '(?<=").*?\|\|.*?(?=")' 试看看 10/10 16:21
9F:→ art1: '(?<=").*?(\|\|).*?(?=")' 忘了要替换了 XD 10/10 16:21
原来要加括号...我测好久都不行,用了个笨方法分三次抓。
11F:推 art1: 若有类似楼上的例子,左边 .*? 要改成排除左括号 [^(]*? 10/10 22:41
12F:→ art1: 右边 .*? 排除右括号 [^)]*? 看看 10/10 22:42
测试了一下好像也是不行,测试的范文在上面网址里。还有什麽好方法吗
13F:推 asglay: 引号中的||编到有命名的group里面 就可以存取该group 10/13 21:30
能再具体一点说明吗
※ 编辑: hunandy14 (126.216.106.98 日本), 10/20/2021 16:40:23
14F:推 art1: 如果是要替换 sql 引号内的||,那不如直接写 sql = 较明确 10/23 09:08
15F:推 art1: sql=".+?(\|\|).+?(\|\|).+?" 这句可以针对你给的那个新例子 10/23 09:12