【问题标题】:JavaScript regex constructionJavaScript 正则表达式构造
【发布时间】:2013-09-04 07:47:23
【问题描述】:

测试下列项目中存在哪些数学运算符(*、/、+、-):

13*4
7+8
-15/3
7-5

我有以下 JavaScript 正则表达式:

/[\*\+/\-]/

问题在于正则表达式会将-15/3 中的否定 符号识别为运算符。如何使它与字符串中的第一个字符不匹配?

【问题讨论】:

  • 另外,这是一个有效的声明5--5
  • 哎呀,越来越复杂了......但确实如此。关于如何解决问题的任何想法?
  • 如果您可以在运算符前后添加空格,那么这将很简单

标签: c# javascript regex


【解决方案1】:

你可以像这样匹配一个正则表达式:

One or more digits (also allowing a decimal)
followed by optional whitespace 
followed by an operator 
followed by optional whitespace 
followed by one or more digits (also allowing a decimal)

然后在中间引用捕获的组以获取运算符:

/[\d.]+\s*([*+\-\/])\s*[\d.]+/

示例代码:

var match = str.match(/[\d.]+\s*([*+\-\/])\s*[\d.]+/);
if (match) {
    var operator = match[1];
}

工作演示和测试代码:http://jsfiddle.net/jfriend00/DgrSg/


如果您希望在运算符之前允许的不仅仅是数字(例如其他表达式),那么您将不得不做的不仅仅是简单甚至复杂的正则表达式。此答案假设您只是尝试解决您提供的示例。

【讨论】:

    【解决方案2】:

    你可以使用:

    /.[\*\+/\-]/
    

    这只是确保符号前面有一个字符。

    这是一个非常快速和肮脏的修复,我可能更愿意制作一个完整的表达式评估器来捕获其他一百个潜在的错误条件,但如果你想要一些简单的东西并且只比你拥有的东西更强大一点,它会做。

    【讨论】:

    • 据我了解,.表示任何字符。是否可以通过简单地使用 //d[\*\+/\-]/ 将前导字符限制为数字?
    • @Jimbo,是的,虽然是\d 而不是/d。但是你真的应该考虑一个合适的表达式评估器的想法,因为正则表达式并没有给你全部的力量——几乎总是会有更多的边缘情况你需要担心:-)跨度>
    【解决方案3】:

    检查您的运算符前面是否有一个数字,然后是一个数字或一个减号和一个数字。

    /\d[\*\+/\-]-?\d/
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多