首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JavaScript正则构造

JavaScript正则构造
EN

Stack Overflow用户
提问于 2013-09-04 07:47:23
回答 3查看 64关注 0票数 0

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

代码语言:javascript
复制
13*4
7+8
-15/3
7-5

对于JavaScript,我有以下正则表达式:

代码语言:javascript
复制
/[\*\+/\-]/

问题是regex会将-15/3中的负号识别为运算符。如何使它与字符串中的第一个字符不匹配?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-09-04 07:50:31

您可以匹配这样的正则表达式:

代码语言:javascript
复制
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)

然后在中间引用捕获的组来获取操作符:

代码语言:javascript
复制
/[\d.]+\s*([*+\-\/])\s*[\d.]+/

样本代码:

代码语言:javascript
复制
var match = str.match(/[\d.]+\s*([*+\-\/])\s*[\d.]+/);
if (match) {
    var operator = match[1];
}

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

如果您想在运算符(例如其他表达式)之前允许更多的数字,那么您必须做的不仅仅是一个简单的、甚至复杂的正则表达式。这个答案假设你只是试图解决你提出的例子。

票数 1
EN

Stack Overflow用户

发布于 2013-09-04 07:50:28

你可以用:

代码语言:javascript
复制
/.[\*\+/\-]/

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

这是一个非常快速和肮脏的修复,我可能更愿意做一个完整的表达式评估器来捕捉其他100个潜在的错误条件,但是如果您想要一些简单的东西,并且只需要比您所拥有的稍微健壮一些的话,它就可以了。

票数 1
EN

Stack Overflow用户

发布于 2013-09-04 09:31:24

检查您的操作符前面有一个数字,后面跟着一个数字、一个减号和一个数字。

代码语言:javascript
复制
/\d[\*\+/\-]-?\d/
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18608194

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档