我试图用Javascript中的正则表达式来编辑一些信息。使用下面的regex,我可以替换值的一部分。
编辑
原始字符串:
mysql --user=USER_NAME --host=DB_HOST --database=SCHEMA -p -e 'SELECT
表达方式:
text.replace(/(.*--user=)(\s*)([^]*)/, '$1XX$2')
输出:
mysql --user=XX
不过,我希望产出如下:
mysql --user=XX --host=XXXXXX --database=XXXX -p -e 'SELECT
有人能帮我用正则表达式来实现这一点吗?
发布于 2021-08-19 17:48:42
如果格式与键值部件之间的单个空格保持不变,键以--
开头,替换时有XX
,则可以匹配模式并捕获组1中的键值部分。
\bmysql (--\w+=\w+(?: --\w+=\w+)*)
在替换中,在空格上拆分,并将=
后的最后一部分替换为XX。
const s = "mysql --user=USER_NAME --host=DB_HOST --database=SCHEMA";
const regex = /\bmysql (--[^\s=]+=[^\s=]+(?: --[^\s=]+=[^\s=]+)*)/;
const result = s.replace(
regex,
(_, g1) => "mysql " + g1
.split(' ')
.map(s => s.split('=')[0] + "=XX")
.join(' ')
);
console.log(result);
在查找过程中使用无限量词的示例
(注意到,如果这是为了安全性,用单个X
替换每个字符可以给出字符串长度的提示)
(?<=\bmysql(?: --[^\s=]+=[^\s=]+)* --[^\s=]+=)[^\s=]+
const s = "mysql --user=USER_NAME --host=DB_HOST --database=SCHEMA";
const regex = /(?<=\bmysql(?: --[^\s=]+=[^\s=]+)* --[^\s=]+=[^\s=]*)[^\s=]/g;
const result = s.replace(regex, "X");
console.log(result);
发布于 2021-08-19 17:59:40
一个简单得多的解决方案,只需一个Regex替换就可以实现您想要的目标,其模式如下:
(?<=--[a-zA-Z0-9]*=)([^ ]*)
const pattern = /(?<=--[a-zA-Z0-9]*=)([^ ]*)/g
const command= "mysql --user=USER_NAME --host=DB_HOST --database=SCHEMA"
console.log(command.replace(pattern, "XX"))
发布于 2021-08-19 18:02:59
如果X
的数量不重要,那么这是短而甜蜜的:
const str = 'mysql --user=USER_NAME --host=DB_HOST --database=SCHEMA';
const newStr = str.replace(/(?<=--\w+=)\w+/g, 'XX');
console.log(newStr);
https://stackoverflow.com/questions/68852322
复制相似问题