从数据库中提取一些表达式 如  parseInt(xx)   xx.toUpperCase()  xx是表单元素标签
我想要通过这些表达式和表达元素算出想要的值。js代码是这样
//formName表单的名字 evExp表达式
function translateExp(formName, evExp) {
var formObj = document.forms[formName];
var replaceValue = null, elem = null;
var regexp = null;
for (var i = 0, n = formObj.elements.length; i < n; i++) {
elem = formObj.elements[i];
if (elem.name && elem.name != undefined && elem.name != "") {
replaceValue = "$('" + elem.name + "').value";
regexp = new RegExp(elem.name, "gi");
evExp = evExp.replace(regexp, replaceValue);
}
}
return evExp;
}现在的情况是这样,表达式是parseInt(wbys)+ parseInt(ys) 表单中也有名字为wbys和ys的输入框。循环表单元素wbys之后 变成 parseInt($(wbys).value)+ parseInt(ys) 。但是循环ys的时候会变成 parseInt($(wb$(ys).value).value)+ parseInt($(ys).value)。正确的解析应为parseInt($(wbys).value)+ parseInt($(ys).value)。起初我打算匹配(wbys) 。regexp = new RegExp("("+elem.name+")", "gi");但是会遇到类似wbys.toUpperCase() 解析后$(wbys).value.toUpperCase() 或者weys=zt的表达式解析后变成
$(wbys).value=$(zt).value这个表达式应该怎么写 求解

解决方案 »

  1.   

    就是 加入解析式是 parseInt(wbys)+ parseInt(ys) 表达元素有个输入框名字为wbys和ys 我现在取得这2个输入框的值 然后计算加和
      

  2.   

    regexp = new RegExp("\b("+elem.name+")\b", "gi");
      

  3.   

      如果表达式是  wbys.toUpperCase()  就不能匹配 也不会替换成 $(wbys).value.toUpperCase()  
      

  4.   

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
      <head>
        <title></title>
    <script language="javascript">
    function tra() {
    //alert(exp.value.replace(/\bYS\b/gi, "123"));
    alert(exp.value.replace(new RegExp("\\bYS\\b", "gi"), "$(YS)"));
    }
    </script>
      </head>
      <body>
       <input type="text" id="exp" disabled value="ZYS = PAGENUM + YS + WBYS + YS1 + YS2 " style="width:350px;">
       <br><button onclick="tra()">将表达式中的YS字段替换为$(YS)</button>
      </body>
    </html>
    这就是解决方式