急急急~~~求一个正则,谢谢大神了

陈--1 2016-03-04 11:14:48
(a+b)*c 或者a+b/(b+c) 和(a+0.9)*(b+0.05)


规则是

开头 可以是 1个或多个正括号 ( 或者英文a-z 或者0-9包括2位数小数 或者中文 ,出现的括号必须成对出现,每个参数或者反括号)后面必须要有个运算符 末尾参数后面不能有运算符或小数点 但可以是小数
...全文
144 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
天际的海浪 2016-03-07
  • 打赏
  • 举报
回复
function balance(str,a,b) {
	var g = 0;
	for (var i = 0; i < str.length; i++) {
		var f = str.charAt(i);
		if (f==a)
			g++;
		else if (f==b) {
			g--;
			if (g<0)
				return false;
		}
	}
	return g==0;
}

var str = "(a+5)*((5.67+b)*甲+乙)";

alert(
	balance(str,"(",")") && /^(\(*([a-z]+|[\u4e00-\u9fa5]+|\d+(\.\d{1,2})?)\)*([\+\-\*\/](?!$)|$))+$/i.test(str)
);
hch126163 2016-03-07
  • 打赏
  • 举报
回复
正则 不能匹配括号是否成对 /^[\(]*[\w]+[\(\)]*([\+\-\*\/][\(\)]*[\w]+[\(\)]*)+$/i /^[\(]*[\w]+[\(\)]*([\+\-\*\/][\(\)]*[\w]+[\(\)]*)+$/i.test("(a+b)*c") true /^[\(]*[\w]+[\(\)]*([\+\-\*\/][\(\)]*[\w]+[\(\)]*)+$/i.test("(a+b)*c+a") true /^[\(]*[\w]+[\(\)]*([\+\-\*\/][\(\)]*[\w]+[\(\)]*)+$/i.test("(a+b)*") false 判断括号是否成对,可以循环原字符串,定义左括号数量 var leftCount=0; 判断每个字符如果==‘(’ leftCount++ 每个字符如果==‘)’ leftCount-- leftCount-- 后如果 leftCount <0 括号不匹配 循环后 leftCount!=0 括号不匹配
天际的海浪 2016-03-05
  • 打赏
  • 举报
回复
这不是用一条正则就能解决的

87,996

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧