Javascript正则表达式,如果没有,则在数学运算符之前和之后添加空间

SirCode先生

我正在尝试为我的不和谐机器人制作完美的数学解析器。

当前,我有一个简单的函数解析器,它接收一个字符串,该字符串具有大量.replace方法来清除一堆垃圾或格式化不和谐中遗留下来的东西,或者仅将{}替换为()以及如此生活质量的东西...

var parseArgs = args.toLowerCase().replace(/ -o/g, "").replace(/x/g, "*").replace(/[a-z]/g, "")
    .replace(/{/g, "(").replace(/}/g, ")").replace(/\[/g, "(").replace(/]/g, ")").replace(/\+=/g, "+")
    .replace(/-=/g, "-").replace(/'/g, "").replace(/`/g, "").replace(/"/g, "");

var origArgs = args.toLowerCase().replace(/`/g, "").replace(/ -o/g, "");

const output = parseMath(parseArgs);

一切都很好,但是如果输入这样的方程式:
!math 1 + 1aaa+aaaa2{55>>2}

解析器将输出:
1 + 1+2*(55>>2)

我希望它输出:
1 + 1 + 2 * (55 >> 2)

它很容易通过我的函数进行解析,但是方程式被发送到聊天中,而且非常难看。

我问是否有一个简单的正则表达式公式来检查数学运算符(+ - / * x ( ) >> ^ += -= == ===)是否在任何数字之间

因此1+2/3(4>>2)3>>4===3*4分别变成1 + 2 / 3 (4 >> 2)3 >> 4 === 3 * 4

编辑:我看到我的替换是多么糟糕,所以我简化了它们:

var parseArgs = args.toLowerCase().replace(/x/g, "*").replace(/ -o|[a-z]|"|'|`/g, "")
    .replace(/{|\[/g, "(").replace(/}|]/g, ")").replace(/\+=/g, "+").replace(/-=/g, "-");
var origArgs = args.toLowerCase().replace(/ -o|`/g, "");
一定的表现

首先删除所有非数学的内容(删除所有不是数字或可能的运算符的内容),然后使用.replace来匹配零个或多个空格,然后使用任何运算符,然后再次匹配零个或多个空格,并替换为运算符,每边各留一个空格:

const parse = (args) => {
  const argsWithOnlyMath = args.replace(/[^\d+\-\/*x()>^=]/g, ' ');
  const spacedArgs = argsWithOnlyMath
    .replace(/\s*(\D+)\s*/g, ' $1 ') // add spaces
    .replace(/ +/g, ' ') // ensure no duplicate spaces
    .replace(/\( /g, '(') // remove space after (
    .replace(/ \)/g, ')'); // remove space before )
  console.log(spacedArgs);
};
parse('!math 1 + 1aaa+aaaa2(55>>2)');
parse(' 1+2/3(4>>2) ');
parse('3>>4===3*4');

要在之前(和之后添加空格),只需添加more .replace

const parse = (args) => {
  const argsWithOnlyMath = args.replace(/[^\d+\-\/*x()>^=]/g, ' ');
  const spacedArgs = argsWithOnlyMath
    .replace(/\s*(\D+)\s*/g, ' $1 ') // add spaces
    .replace(/\(/g, ' (') // add space before (
    .replace(/\)/g, ') ') // add space after )
    .replace(/ +/g, ' ') // ensure no duplicate spaces
    .replace(/\( /g, '(') // remove space after (
    .replace(/ \)/g, ')'); // remove space before )
  console.log(spacedArgs);
};
parse('!math 1 + 1aaa+aaaa2(55>>2)');
parse(' 1+2/3(4>>2) *()');
parse('3*()');

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

正则表达式以匹配所有字母数字和数学运算符

来自分类Dev

正则表达式以匹配所有字母数字和数学运算符

来自分类Dev

PHP正则表达式用于数学运算

来自分类Dev

在数字之前和之后添加空格(正则表达式)

来自分类Dev

Ruby正则表达式:运算符和

来自分类Dev

JavaScript正则表达式OR运算符

来自分类Dev

ggplot2中具有数学运算符的Plotmath表达式

来自分类Dev

具有'and'运算符的Perl / Javascript正则表达式

来自分类Dev

比较运算符后的float和ratio表达式的正则表达式

来自分类Dev

如何在文本文件中的正则表达式之前和之后添加换行符?

来自分类Dev

如何在文本文件中的正则表达式之前和之后添加换行符?

来自分类Dev

Java正则表达式组OR运算符

来自分类Dev

OCaml | 正则表达式运算符

来自分类Dev

正则表达式OR运算符的计算方式

来自分类Dev

Python正则表达式匹配OR运算符

来自分类Dev

Bash正则表达式=〜运算符

来自分类Dev

正则表达式分组与重复运算符

来自分类Dev

RFC正则表达式运算符

来自分类Dev

正则表达式运算符(.. | .. ... .. | ..)的顺序

来自分类Dev

mongodb正则表达式中的AND运算符

来自分类Dev

正则表达式中的比较运算符

来自分类Dev

正则表达式不是运算符

来自分类Dev

如何使OR运算符成为正则表达式?

来自分类Dev

使用OR运算符的Python正则表达式

来自分类Dev

改变Ruby正则表达式运算符

来自分类Dev

正则表达式-或运算符

来自分类Dev

正则表达式 Java 运算符

来自分类Dev

python运算符'in'与正则表达式

来自分类Dev

使用 AND NOT 运算符的正则表达式