为了账号安全,请及时绑定邮箱和手机立即绑定

用于测试同一字符串中的关键字和数学表达式的 Javascript 正则表达式

用于测试同一字符串中的关键字和数学表达式的 Javascript 正则表达式

阿晨1998 2023-05-19 15:03:03
所以说到正则表达式我javascript,我只知道1%左右。我正在尝试编写一些代码来检测数学表达式(例如 2 + 3)。前段时间我在另一个问题上发现了这个:/(?:(?:^|[-+_*/])(?:\s*-?\d+(\.\d+)?(?:[eE][+-]?\d+)?\s*))+$/I这似乎工作正常,但我只希望它在前面有特定关键字时工作。所以现在我有这样的东西:var re = /(?:(?:^|[-+_*/])(?:\s*-?\d+(\.\d+)?(?:[eE][+-]?\d+)?\s*))+$/i;var str = "2 + 2";console.log(str.match(re));但我想要这个:var keyword = "Some keyword ";var str = `${keyword}2 + 2`;//Regular expressio that should only work if "Some keyword" and math expression are therevar re = //the expression//should match the stringconsole.log(str.match(re));//But if the keiword is not therevar keyword = "";var str = `${keyword}2 + 2`;//Regular expressio that should only work if "Some keyword" and math expression are therevar re = //the expression//should NOT match the stringconsole.log(str.match(re));我试过这个,但它并没有真正达到我的预期:var one = /Some keyword /i;var two = /(?:(?:^|[-+_*/])(?:\s*-?\d+(\.\d+)?(?:[eE][+-]?\d+)?\s*))+$/i;var one_or_two = new RegExp("(" + one.source + ")?(" + two.source + ")")var str = "Some keyword 2 + 1";alert(str.match(one_or_two))我需要在正则表达式中使用所有这些,因为我不能使用 str.match(re)有没有办法做到这一点?无论如何提前感谢。
查看完整描述

1 回答

?
30秒到达战场

TA贡献1828条经验 获得超6个赞

您的two正则表达式包含一个^断言,该断言阻止了关键字后的匹配。


下面是您的最后一次尝试,更正了此错误,为公式命名捕获并添加了整个字符串,并删除了问号,因此现在需要“Some keyword”。此外,由于标志,我替换[eE]为, : ei


var one = /Some keyword /i;

var two = /(?:(?:|[-+_*/])(?:\s*-?\d+(\.\d+)?(?:e[+-]?\d+)?\s*))+$/i;


var one_or_two = new RegExp("(?<whole>(" + one.source + ")(?<formula>" + two.source + "))")


var str = "Some keyword 2 + 1";

if (match = str.match(one_or_two)) {

    console.log(match.groups.formula); // Only the formula.

    console.log(match.groups.whole); // The whole string.

}


查看完整回答
反对 回复 2023-05-19
  • 1 回答
  • 0 关注
  • 133 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信