0

と言う表情をしています

ログ(1,3)+4,5+最大(7,8,9)

ここで、コンマは 2 つの方法で使用されています。

1- "log(1,3)+4,5" では、ドット (.) または小数点記号の代わりにコンマが使用されています。つまり、" log(1,3)+4,5"は " log(1.3 )+4.5インチ

2- max(7,8,9) では、数値セパレータとして使用されています。つまり、この結果は 9 です。最大数。

私の問題は、コンマを置き換えることです。これは小数点として使用されています。ただし、これは max(7,8,9) には影響しません。つまり、上記の式をに変換する必要があります

ログ(1.3)+4.5+最大(7,8,9)

私が試したこと -

function substitute(expr) {
    expr.replace(/,/g, function ($`) {
        /*some processing here to decide whether comma to be substituted with dot or not.On that basis I will return either dot or comma.*/
    }

しかし、関連する関数に $` 値を渡すにはどうすればよいですか、または JavaScript でこれを行うことは可能ですか?

expr.replace(/,/g,function ($`) {

はいの場合、どのように?

4

3 に答える 3

1

あなたの言語はあいまいです。

max(8,1,8,2)

8これは、8,1またはを返します8,2か?

あなたの言語も正規表現に見えないため、正規表現で解析することはできません。コンテキストが必要です。このようなものが許可されている場合:

max(1,max(2,3)) // 3?

あいまいさを取り除くことができると仮定すると、コンテキスト検出を行うパーサーを作成できます。

于 2013-10-04T10:02:51.853 に答える
0

これは解決策になる可能性があります:

function myFilter(string) {
    // save all functions and signs 
    var functions = [];
    var regExp = /[+,-]max\(([^\)]+)\)/;
    matches = true;
    while (matches !== null) {
        var matches = regExp.exec(string);
        if (matches !== null) {
            functions.push(matches[0]);
            string = string.replace(matches[0], '');
        }
    }
    // replace all remaining commas with dots
    string = string.replace(/,/g , ".");
    for (i in functions) {
        string += functions[i];
    }

    return string;
}

var s = '1,3+4,5+max(7,8,9)-max(2,3,5)';
var filteredString = myFilter(s);

jsFiddle デモ

これは現在、複数の関数で機能しますが、記号maxのみです。などで改善される可能性があります... 適切な正規表現を見つける必要があります。+-*/

于 2013-10-04T10:41:49.790 に答える
0

Javascriptを使用して以下を試してください。これが論理的に役立つことを願っています。

デモはこちら

var value = "log(1,3)-4,5+max(7,8,9)";
var val = '';

var splitValue, appendSym;
if (value.indexOf("+") != -1)
{
    splitValue = value.split("+");
    appendSym = "+";
}
else if(value.indexOf("-") != -1)
{
    splitValue = value.split("-");
    appendSym = "-";
}
else if(value.indexOf("*") != -1)
{
    splitValue = value.split("*");
    appendSym = "*";
}
else
{
    splitValue = value.split("/");
    appendSym = "/";
}

var length = splitValue.length;

for (var i = 0; i < length; i++) {
  if (val) val += appendSym;
    var strrep = splitValue[i].replace(/,/g,".");
    if (splitValue[i].indexOf("max") != -1 || splitValue[i].indexOf("min") != -1)
    {
        val+=splitValue[i];
    }
    else
    {
        val+=strrep;
    }
}

alert(val);

上記のコードの出力は次のとおりです。log(1.3)-4.5+max(7,8,9)

于 2013-10-04T10:12:32.760 に答える