방정식이 포함 된 문자열이 있습니다. 지수를 찾기 위해 문자열을 확인한 다음 연산 순서에 따라 해당 표현식의 한계를 찾아야합니다. 설명하는 방법을 잘 모르겠습니다. 여기에 내 목표를 보여주는 문자열과 예상 출력이 있습니다.
2*(3+4)
: 일치하지 않음 (지수 없음)2^5
: 전체 문자열은 지수 연산입니다.4^7-6
: 찾기 4^7
5+6^3
: 그냥 찾기 6^3
(5+6)^3
: 전체 문자열이 지수의 일부입니다.(6+-4)^8
: 음수를 포함한 전체 문자열이 지수의 일부입니다.이러한 숫자는 'x'와 같은 단일 문자 변수 일 수도 있습니다. 양쪽에 수학 연산이있을 수 있으므로 내가 원하는 부분 (내가 알고있는)을 찾는 유일한 방법은 단일 숫자 또는 한 쌍의 괄호를 일치시키는 것입니다. 정규식을 사용하고 싶지만 일반 문자열 조작도 괜찮습니다. 나는 다음과 같은 것에 대해 생각하고 있었다 (정규식) : [0-9a-z\.]\^[0-9a-z\.]
그러나 그것은 가능한 음수 부호를 수용하지 않으며 괄호와 같은 그룹화 기호를 허용하지 않습니다 (이를 위해 일치하는 쌍만 있는지 확인해야합니다). 위의 시도가 실패하는 몇 가지 다른 경우가 있습니다.
그래서 이것을하는 가장 좋은 방법은 무엇입니까? 정규식으로 모든 경우를 포착하는 방법을 알 수있는 전문 지식이 없으며 순수한 JS로 모든 가능성을 처리하는 방법을 모릅니다.
입력 한 내용이 언급 한 내용과 일치하면 다음과 같이 제안합니다.
-?(?:[a-z]+|\d+|\([^()]+\))\^-?(?:[a-z]+|\d+|\([^()]+\))
샘플 일치 :
-2^3
2^3
2^(a/b)
(a+b)^7
(a+b)^(d/c)
(5+6)^3
데모 에서 일치하는 내용을 참조하십시오 .
i
플래그 를 설정하여 대소 문자를 구분하지 않도록하십시오.2^(3-(2/x))
설명
-?
선택적 빼기 기호를 허용합니다.(?:[a-z]+|\d+|\([^()]+\))
문자로 구성된 변수와 일치 [a-z]+
... 또는 '|`\d+
또는|
\([^()]+\))
괄호 세트\^
지수 연산자와 일치옵션 2 : x^y^z...
허용 x^y^z...
하려면 다음과 같이 정규식을 수정하십시오.
-?(?:[a-z]+|\d+|\([^()]+\))(?:\^-?(?:[a-z]+|\d+|\([^()]+\)))+
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다