0

我有一个 javascript 字符串,我想将其作为表达式进行评估并与值进行比较。

var stringExpression=">.5*{PropertyValue} + .2*{DesignValue}+ 2000 +{price}"; 

花括号内的值是 dom 中存在的元素 id,上面的表达式是动态的,但我要选择其值的元素将始终存在于花括号内。我计划使用 jquery 来选择这些值。$("#PropertyValue").val()。有人可以告诉我如何在 javascript post 设置来自 dom 的值以及如何替换值的任何想法中进行此评估,我需要使用 split 函数还是可以使用一些正则表达式来实现它。

您还可以向我指出任何可以在这方面提供帮助的 javascript 框架。

提前致谢。

4

2 回答 2

0

这是功能范式中的一个解决方案,读起来非常好:

function value(tag)
{
    var key = tag.substr(1, tag.length - 2) //remove braces
    return document.getElementById(key)
}


function populate(template)
{
    var tagRegExp = /{.+?}/g
    var tags = template.match(tagRegExp)
    var values = tags.map(value)
    return template.split(tagRegExp).zip(values).join("")
}

var template=">.5*{PropertyValue} + .2*{DesignValue}+ 2000 +{price}"; 
console.log(populate(template))

此解决方案需要一种zip用于数组对象的方法,该方法可以按如下方式实现(除非它已由库提供)。

Array.prototype.zip = function (other) {
    function zipOne(acc, x, i, a)
    {
        if (i < other.length) {
            if (i < a.length - 1) {
                return acc.concat([x, other[i]])
            } else {
                return acc.concat([x]).concat(other.slice(i))            
            }
        } else {
            return acc.concat([x])
        }
    }

    return this.reduce(zipOne, [])
}
于 2013-10-11T15:40:26.427 回答
0
var str=">.5*{PropertyValue} + .2*{DesignValue}+ 2000 +{price}"; 

var regExp = /{(.*?)}/
var values = []
var match = str.match(regExp)
while (match != null) {
    var value = document.getElementById(match[1])
    str = str.replace(match[0], value)
    values.push(value)
    match = str.match(regExp)
}
于 2013-10-11T10:38:17.677 回答