2012-10-26 1 views
3

웹 페이지에서 LaTex 지시어를 교체해야합니다. LaTex 지시문은 $ a^2 + b^2 = 1 $ (인라인 수식) 또는 $$ a^2 + b^2 = 1 $$와 같은 두 개의 '$'기호로 둘러 쌉니다. 새 줄에 표시). 이제 브라우저 자체가 LaTex 스타일로 이러한 수식을 표시 할 수 없으므로 JavaScript를 사용하여 thest 지시문을 일부 사진 (이러한 지시문에 해당)으로 대체하려고합니다. (그림 참조) a^2+b^2=1 정규 표현식을 사용하면 어떻게 할 수 있습니까? 그리고 몇 가지 문제를 가지고 아래에서 저의 작업을 보여 줬습니다. 인라인 공식에 대한 , 내가 사용 : 나는 일부 텍스트가 $로 시작하고 싶은 의미자바 스크립트가있는 웹 페이지에서 LaTex 지시어를 찾는 정규 표현식

var reg = /\$([^$]|(\\$))*\$(?=[^$])/mg 

는 '하지 $'이거나 '이 \의 $'또는 아무것도이고, '$'로 끝나는 여부를 그 이후 그러나 끝이 $의 상승을 허용하지 않을 후에. 좋은 소리 .. 같은 텍스트에 대한 : $ a^2 \ $ b^2 $ aparently, 나는 (그림 참조) a^2\$b^2으로 표시됩니다 좋겠지 만 진실은 정규 표현식은 '* 대체 * b^2 $ '. 도움이 필요합니다 ~~

+2

Mathjax를 사용하고 계시지 않습니까? http://www.mathjax.org/ –

+0

조언 해 주셔서 감사합니다. 나는 그 포장을 시도하지 않았다, 그러나 나는 그것을 전해 들었다. 내 응용 프로그램에서 수치가 선호됩니다. – zoujyjs

+0

가능한 경우 시도해보십시오. 그것은 이런 종류의 물건을위한 표준이되고 있습니다. –

답변

1

다음 정규식

/(\${1,2})((?:\\.|.)*)\1/ 

는 단일 또는 이중 달러로 둘러싸인 라텍스 블록을 일치합니다. 시작 태그와 일치시키기 위해 역 참조 \ 1을 사용합니다.

source.replace (/(\${1,2})((?:\\.|[\s\S])*)\1/g, function (m, tag, src) { 
    // m is the entire match 
    // tag is '$' or '$$' 
    // src is the internal text 

    var rslt = ''; 

    // create what you want to appear in rslt. 

    return rslt; 
} 
+0

그것은 대부분의 상황에서 잘 작동하지만 백 슬래시 \ $로 이스케이프 처리되는 수식에 몇 가지 $ 기호가 있다고 가정하면 올바른 결과로 이어지지는 않습니다. – zoujyjs

+0

내 대답을 편집합니다. LaTex 문자열 바깥에서도 같은 문자열을 요구하면 조금 주위를 바꿔야합니다. 그때까지 ... – HBP

0

LaTex에 대해 잘 모르겠지만 한 줄의 코드로 너무 많은 노력을하고있는 것처럼 보입니다. 같은 다른 경우 논리적 인 문장을 시도해보십시오 : 등록이 시작 $$로 끝나는 경우

의미
if (var reg =/\$\$(.*?)\$\$/msg 
    {block_formula=$1} 

elsif (var reg=/\$(.*?)\$/msg 
    {inline_formula=$1} 

는 "그 사이에 무엇이든 포함하는 블록 식입니다 그렇지 않으면 $$의 등록이 시작과 끝나는 경우. $, 그것은 $ 사이에있는 것을 포함하는 인라인 수식입니다. "

또한 정규 표현식의 일부만 바꾸는 경우 -s 플래그를 넣어 모든 인스턴스와 일치하는지 확인하십시오.

+0

실제로, 예를 들어 인라인 상황을 지정합니다. 한 줄의 코드에서 두 치환을하려고하지 않고 위의 코드는 인라인 상황에서 특별히 사용되지만 문자열에 '/ $'와 같은 이스케이프 된 $가 있으면 잘못되었습니다. – zoujyjs

+0

OK, 그 중 하나를 수정했습니다. 이제 LaTex 텍스트 밖에서 같은 것을 요구한다면 우리는 약간의 변화를 가야 할 것입니다. – HBP

+0

일은 항상 그렇게 간단하지는 않습니다 ... 나는 단지 그것이 무엇이든지 관계없이 공식에서 어떤 탈출 된 $을 용인 할만한 일치를 찾고 싶습니다. 실제로 그것은 전혀 = 없을지도 모릅니다. Javascript는 소위 _lookbehind_를 지원하지 않거나, 끝 $ 앞에 백 슬래시가 없어야한다는 것을 지정하기 위해 이것을 사용할 수 있습니다 (예 :? <= [^ \]) ​​$). 백 슬래시. 이것은 perl에서 작동합니다. – zoujyjs

0

내가 라텍스 모르지만, 그것은 본다 :

ovver 라인의 경계를 확장 할 수 있습니다 라텍스 블록이 다음 문자열 내에서 대체 전역에에

/(\${1,2})((?:\\.|[\s\S])*)\1/ 

를 사용하는 경우

source 말 한 줄의 코드로 너무 많은 것을하려는 것처럼. 논리적를하려고하면 같은 else 문 다음.?

경우 (var에 등록 =/\ $ \ $ (*) \ $ \ $/MSG {block_formula = $ 1}

ELSIF (var에 등록 =/$$(.*?)\$/msg {inline_formula = $ 1}

"reg는 $$로 시작하고 끝나면 $$ 사이의 값을 포함하는 블록 수식입니다. reg는 $로 시작하고 끝나며 $ 사이의 값을 포함하는 인라인 수식입니다. "

편집 : 정규식을/(\ $ {1,2}) (\ S {2,10} = \ d +) $ 1/수식이 항상 끝나는 경우 =와 숫자를 사용하여 가운데에있는 \ $를 잡습니다. 그래도 문제가 해결되지 않으면 더 많은 예제를 제공하여 일치 항목을 찾을 수 있습니다.

+0

일들이 항상 그렇게 단순하지는 않습니다. 나는 그것이 무엇이든 형식적으로 빠져 나오는 것을 용인할만한 일치를 찾고 싶습니다. 실제로 그것은 전혀 = 없을지도 모릅니다. Javascript는 소위 _lookbehind_를 지원하지 않거나, 끝 $ 앞에 백 슬래시가 없어야한다는 것을 지정하기 위해 이것을 사용할 수 있습니다 (예 :? <= [^ \]) ​​$). 백 슬래시. 이것은 perl에서 작동합니다. – zoujyjs

0

다음 정규식은 새로운 라인 (때로는 큰 공식 따라서 여러 개의 전화 회선이) 포함

/(\${1,2})[^]*?[^\\]\1|[^\$]+\1/gm

:

/(\${1,2})[^]*?[^\\]\1/gm

을 그리고 당신은 또한 텍스트 외부의 구분 기호를 일치시킬 경우 Tests