第N个根Swift渲染

时间:2016-11-02 08:38:02

标签: ios swift

我有数学应用。我有问题nth root。我正在使用mathJax库来渲染结果。用户输入结果将在textview中。我需要在IOS中显示cube root和nth root。用户点击第n个根密钥后,会显示√(n)(x)此处用户必须删除n并输入root值和root。

Swift代码

func replaceNTHRootEquation(equation : String)->String{
    print("===equation==:\(equation)")
    let newString = equation.stringByReplacingOccurrencesOfString("√\\((.*)\\)\\((.*)\\)", withString: "root($2)^(1/$1)")
    print("===newString==:\(newString)")

    return newString
}

我会像这样工作,当用户按下时,它会显示在textview √(n)(x) , then user delete n and type value like x`中。{/ p>

目前我的问题是我传递的初始等式如√(n)(x),但replaceNTHRootEquation方法会返回相同的结果。不是root(3)(27)

这并不总是替换字符串//√(3)(27)。不要像 this result

那样给出

请提出建议

1 个答案:

答案 0 :(得分:1)

"√((.*))((.*))"未能按预期捕获√(3)(27),因为外部括号未被转义。就像它们一样,它们被解释为捕获组,例如:

  • (.*)是您的第一个捕获组($1
  • .*是您的第一个捕获组($2
  • (.*)是您的第一个捕获组($3
  • .*是您的第一个捕获组($4

您需要通过添加\来转义括号,以指示您希望将括号字面解释为括号,而不是捕获组的开始/结束。但是,\已经具有保留意义,因为它启动了各种与Swift相关的转义序列。因此,您需要使用另一个斜杠来转义\,以指示您希望将斜杠字面解释为斜杠,而不是转义序列的开头。像这样:

"√\\((.*)\\)\\((.*)\\)"