javascript - 自动替换 RegEx JavaScript 中的参数
问题描述
我对一些正则表达式有疑问。
对于上下文,我目前正在 Discord 机器人上创建自定义命令。我需要重新排列命令中的参数。
我这里有这个字符串 -bin [user] [aRG] [arg] [DEsc]
并且需要像这样安排它 - bin [USER] $0 $1 [DESC]
。我还需要使它不区分大小写。
我试图在每一个可能的情况下创建 IF 语句。但我还需要记住的是,如果[DESC]
先出现然后是论点,我需要重新安排它。这就是我所拥有的——
let theString = "bin [uSER] [arg] [DESc] [ARg]";
let CmdName = theString.split(" ")[0].toLowerCase();
if (theString.includes(/\[user\]/i)) CmdName += " [USER]";
if (theString.includes(/\[arg\]/i)) CmdName += " $0";
if (theString.includes(/\[arg\]/i)) CmdName += " $1";
if (theString.includes(/\[arg\]/i)) CmdName += " $2";
if (theString.includes(/\[desc\]/i)) CmdName += " [DESC]";
上面的例子无论如何都行不通,如果 甚至有一个[ARG]
in theString
,它将包含$0 $1 $2
在CmdName
变量中,因为它theString
永远不会改变。
在上面的例子中,CmdName
最终需要像bin [USER] $0 $1 [DESC]
.
我怎样才能有效地做到这一点,也可能迭代它?将值使用限制[ARG]
为三个或四个也很方便。
解决方案
您可以使用正则表达式\[(.*?)\]
将内容获取[]
到捕获组(正则表达式演示)。然后使用替换函数分别处理 forarg
和其他参数。使用 anargCounter
获取连续数字$0
,$1
let str = "bin [user] [aRG] [arg] [DEsc]",
argCounter = 0;
const newStr = str.replace(/\[(.*?)\]/g,
(m, p1) => {
if (p1.toUpperCase() === 'ARG')
return `$${argCounter++}`
else
return `[${p1.toUpperCase()}]`
})
console.log(newStr)
推荐阅读
- graphql - 如何使用 graphql 从表中获取计数(id)
- css - 不透明度不适用于 Ionic 3
- java - 如何在应用程序上下文中找到急切创建的 bean?
- javascript - 使用 JQuery 而不是 CSS 的幻灯片动画
- sql - PostgreSQL 不识别列
- c++ - 在 macOS 上编译 GLEW 和 GLUT?
- django - django.urls.path中name参数的作用是什么?
- sql - 在 SQL 数据库中存储非关系整数列表
- nixos - 在 NixOS 中,有没有办法获取可用控制台字体的列表?
- javascript - 一个接一个地解决一系列promise