Javascript 需要一种使用数组设置字符串变量的方法吗

Javascript 需要一种使用数组设置字符串变量的方法吗,javascript,Javascript,我的问题正是如上所述。下面有一些代码定义了数组中的变量集。已经存在的代码只是去掉了文本框中定义变量的区域,这样就可以得到答案。您可以只定义变量,也可以在定义变量后编写[simp]以获得简化的答案,而不仅仅是交换变量。例如,我希望您能够在文本框中写入1+a[a=1],并在下面的文本中获得1+1 <!DOCTYPE html> <html> <head> <title>PlayBox</title&

我的问题正是如上所述。下面有一些代码定义了数组中的变量集。已经存在的代码只是去掉了文本框中定义变量的区域,这样就可以得到答案。您可以只定义变量,也可以在定义变量后编写[simp]以获得简化的答案,而不仅仅是交换变量。例如,我希望您能够在文本框中写入1+a[a=1],并在下面的文本中获得1+1

<!DOCTYPE html>
    <html>
        <head>
            <title>PlayBox</title>
            <style>
                textarea {
                    resize: none;
                    width: 100%;
                    height: 100px;
                }
                body{
                    font-family: 'Courier New', Courier, monospace;
                    background-color: white;
                }
            </style>
        </head>
        <body>
            <textarea id="input"></textarea>
            <button onclick="run()">Run</button>
            <p id="output"></p>
            <script>
                function run() {
                    var input = document.getElementById('input').value 
                    var simpPositive = input.search('[simp]')
                    var doctorPositive = input.search('[doctor]')
                    var defineVarPositive = input.search(/\[\D\=\d/)
                    if ((simpPositive > -1) & (defineVarPositive < 0)) {
                        var newInput1 = input.replace('[simp]', '').replace(/(?<=[\d\)])\((?=\d)/g, "*(")
                        var simp = eval(newInput1)
                        document.getElementById('output').innerHTML = simp
                    }
                    if (doctorPositive > -1) {}
                    if (defineVarPositive > -1) {
                        var findMultVar = input.split('[')
                        var elem = findMultVar[1];
                        var fixFindMultVar = elem.substring(0, elem.length -1)
                        var ffmvarr = fixFindMultVar.split(';')//array here
                        var replaceletter = input.split('[')[0]//need more code here to change the variables using the array
                        console.log(replaceletter)
                        if (simpPositive > -1) {
                            var deleteSimp = replaceletter.replace('[simp]', '')
                            var newInput2 = deleteSimp.replace(/(?<=[\d\)])\((?=\d)/g, "*(")
                            var simp = eval(newInput2)
                            document.getElementById('output').innerHTML = simp
                        } else {
                            document.getElementById('output').innerHTML = replaceletter
                        }
                    }
                    if ((simpPositive < 0) & (defineVarPositive < 0) & (doctorPositive < 0)) {
                        document.getElementById('output').innerHTML = 'error: no modifiers found';
                    }
                }
            </script>
        </body>
    </html>

游戏箱
文本区{
调整大小:无;
宽度:100%;
高度:100px;
}
身体{
字体系列:“Courier New”,Courier,monospace;
背景色:白色;
}
跑

函数运行(){ var input=document.getElementById('input')。值 var simpPositive=input.search(“[simp]”) var doctorPositive=input.search(“[doctor]”) var defineVarPositive=input.search(/\[\D\=\D/) if((simpositive>-1)和(defineVarPositive<0)){ var newInput1=input.replace('[simp]','').replace(/(?-1){} 如果(定义积极性>-1){ var findMultVar=input.split('[')) var elem=findMultVar[1]; var fixFindMultVar=元素子字符串(0,元素长度-1) var ffmvarr=fixFindMultVar.split(“;”)//此处为数组 var replaceletter=input.split(“[”)[0]//需要更多代码才能使用数组更改变量 console.log(replaceletter) if(simpositive>-1){ var deleteSimp=replaceletter.replace(“[simp]”,”)
var newInput2=deleteSimp.replace(/(?我可以看到您试图使用
split
来解决此问题。虽然理论上可以找到解决方案,但它会非常混乱。只需使用字符串匹配和替换就可以轻松地解决此问题,就像您在代码的其他地方所做的那样

下面是一个简单的解决方案,它将搜索所有变量分配(即
[variable=value]
),然后对
输入执行全局查找和替换。最后,代码将删除所有变量分配,为您提供所需的结果

它应该适用于任意数量的变量分配,以及任意数量的变量使用(由于全局替换)


注意:我不确定您的全部需求-但目前您的初始代码(以及上面的代码)解释一个单字符变量名和一个单位数值;这很容易适应更一般的用例。

我可以看到您试图使用
拆分来解决这个问题。虽然理论上可能有一个解决方案,但它会非常混乱。只需使用字符串匹配和替换即可轻松解决此问题nt,正如您已经在代码中的其他地方所做的那样

下面是一个简单的解决方案,它将搜索所有变量分配(即
[variable=value]
),然后对
输入执行全局查找和替换。最后,代码将删除所有变量分配,为您提供所需的结果

它应该适用于任意数量的变量分配,以及任意数量的变量使用(由于全局替换)

注意:我不确定您的全部要求-但目前您的初始代码(以及上面的代码)包含一个单字符变量名和一个单位数值;这很容易适应更一般的用例

for (const match of input.match(/(\[\D\=\d\])/g)) {
  const name = match[1]
  const val = match[3];
  input = input.replace(new RegExp(name, 'g'), val);
}
input = input.replace(/\[.+?\]/g, '');