안녕하세요 저는 JavaScript 및 HTML5 (here's the link)로 프랙탈 생성 프로그램을 작성했습니다.이 프로그램은 Complex 수학 및 프랙탈 방정식에서 수행 한 모든 연구를 포함하여 약 2 년 과정이었으며 이후 인터페이스를 업데이트하려고했습니다. 사람들이 보는 것을 상당히 위협적입니다. 코드를 살펴 보았을 때 나는 일을하는 것에 대한 나의 오래된 기법 중 일부는 매우 비효율적이었다 (예 : Complex.parseFunction).수학 표현식을 구문 분석하기위한 RegExp?
RegExp를 사용하여 함수, 연산자 및 변수와 같은 표현식의 구성 요소를 구문 분석하고 표현식에 대한 올바른 연산 순서를 구현하는 방법을 찾고 있습니다. 예는 아래 무슨 뜻인지 보여 있습니다
//the first example parses an expression with two variables and outputs to string
console.log(Complex.parseFunction("i*-sinh(C-Z^2)", ["Z","C"], false))
"Complex.I.mult(Complex.neg(Complex.sinh(C.sub(Z.cPow(new Complex(2,0,2,0))))))"
//the second example parses the same expression but outputs to function
console.log(Complex.parseFunction("i*-sinh(C-Z^2)", ["Z","C"], true))
function(Z,C){
return Complex.I.mult(Complex.neg(Complex.sinh(C.sub(Z.cPow(new Complex(2,0,2,0))))));
}
내가 정규식이 String.prototype.replace
와 모든 것을 사용하여 처리하는 방법을 알고, 내가 필요로하는 모든 정규 표현식 자체입니다. 감산 연산자 (예 : "CZ^2")와 음수 함수 (예 : "i * - (Z^2 + C)")의 차이를 알 수 있어야합니다. 변수 또는 연산자를 나타냅니다.
내 권장 사항은 이런 식으로 정규식을 사용하지 않는 것입니다. 이런 식의 문제 (심지어 가능하다면)에 대한 정규 표현식은 매우 복잡해야하며 읽고 유지하기가 어렵고 다른 파싱 메서드보다 성능이 떨어질 수도 있습니다. 특정 역할을 수행하는 것으로 이미 알려진 문자열의 작은 조각을 파싱하는 데 정규 표현식을 사용할 수는 있지만 그러한 일반적이고 포괄적 인 상황에 대한 정규 표현식은 내 경험 에선 일반적으로 갈 길이 아닙니다. –
전체 URL을 URI 형식으로 구문 분석하기위한 정규식을 보았습니다. 완벽하게 효율적으로 작동합니다. 이것은 크게 다르지 않습니다. 예, RegExp 자체는 작성하기 어렵지만 ** 표현을 파싱하는 데 더 효과적입니다 **. –