JavaScript 如何在字符串里找到自定义公式或特定字符串

  论坛里有这么个提问:如何在字符串里找到自定义公式,字符串类似 “355/113+JE((2+2)2,3(2+1))*7-21”, 然后在里面找到自定义的公式"JE((2+2)2,3(2+1))"。看到问题第一想法就是能不能用正则表达式,限于本人对正则不是特精通,对正则在匹配对称字符方面不是很了解,就投降了,那就写个简单的解析函数来实现吧。

1、思路

  这个问题我若没记错的话,应该学习数据结构时讲过的,应该是用栈实现的,后进先出,及先放左括号,然后解析到右括号时,左括号弹出,然后判断栈是否为空,为空则表示完成解析。
  JavaScript没有栈,那就用一个空字符串表示吧,var brackets = ‘’,具体步骤:
1)找到左括号,brackets += ‘(’;
2)找到右括号,分两步:

  • brackets 去掉最后一个左括号;
  • 判断brackets是否为空字符串,为空则解析结束

2、js代码

    	function parseFormula(str, formular) {
    		var result = '', pos = str.indexOf(formular+'('), brackets = "";
    		if(pos > -1) {
    			str = str.substring(pos);
    			for(var i = 0, l = str.length; i<l; i++) {
    				if(str[i] == '(') {	//str[i] == ')'
    					brackets += str[i]
    				} else if(str[i] == ')'){
    					if((pos = brackets.lastIndexOf('(')) > -1) {
    						brackets = brackets.substring(0, brackets.length - 1);
    						if(brackets == "") {
    							result = str.substring(0, i+1);
    							break;
    						}
    					}
    				}
    			}
    		}
    		return result;
    	}
    	var str = '355/113+JE((2+2)*2,3*(2+1))*7-21';
    	var str2 = '355/113+JE(1-2*3(1-2)+2)*7-21';
    	console.log(parseFormula(str, 'JE'));	 //JE((2+2)*2,3*(2+1))
    	console.log(parseFormula(str2, 'JE')); //JE(1-2*3(1-2)+2)

3、总结

正则熟练的话,能用正则实现还是建议正则实现,简单、灵活。
上述只是一个建议方案,当然可以用其它方法来实现,只要能解决问题就OK。

猜你喜欢

转载自blog.csdn.net/chuangxin/article/details/85276550