javascript
  • regex
  • 2017-04-24 2 views 2 likes 
    2

    {all-content}^{^}\ hat {all-content}으로 바꿉니다. 그리고 문자열과 예상 출력은맞춤 브래킷을 특정 콘텐츠로 바꾸기

    str = str.replace(/\{(.*?)\}\^\{\^\}/g, "\\hat{$1}") 
    

    str = '{A}^{^} this is sample content {{A}_{22}}^{^} with more complex structure {A}_{X-1} {B+2}^{^} another content with multi level content {A+{B}^{^}}^{^}'; 
     
    str = str.replace(/\{(.*?)\}\^\{\^\}/g, "\\hat{$1}"); 
     
    console.log(str)

    .. 여기

    |---------------------|-------------------|-------------------| 
    | String Input  | Expected Result |  What I get | 
    |---------------------|-------------------|-------------------| 
    |  {A}^{^}  |  \hat{A}  |  \hat{A}  | 
    |---------------------|-------------------|-------------------| 
    | {{A}_{22}}^{^} | \hat{{A}_{22}} | \hat{{A}_{22}} | 
    |---------------------|-------------------|-------------------| 
    | {A}_{X-1} {B+2}^{^} |{A}_{X-1} \hat{B+2}|\hat{A}_{X-1} {B+2}| 
    |---------------------|-------------------|-------------------| 
    | {A+{B}^{^}}^{^} | \hat{A+\hat{B}} | \hat{A+{B}}^{^} | 
    |---------------------|-------------------|-------------------| 
    

    ... 등이 정규식해야 업데이트 : {...} - -> 문자, 특수 문자 또는 유니 코드 기호가 될 수 있습니다. 중첩 된 중괄호의 둘 이상의 레벨을 포함 할 수도 있습니다.

    그래서 정규 표현식에서 사용할 수 있습니까? 없는 경우는 각각의 일치 ^{^}{ 같은 수를 포함하지만, 대부분의 경우에 작동합니다 가정하기 때문에, 다른 대안 ..

    +0

    ** ** words **에서, '{...}'의 내용에 대한 규칙은 무엇입니까? –

    +0

    {...} 형식은 [tex] (https://en.wikipedia.org/wiki/TeX) 형식입니다 ... 일반적으로 특수 문자 및 유니 코드 기호를 포함한 모든 문자 – mimind

    +0

    네 번째 예제에서는 중첩 구조체에서 JavaScript의 정규 표현식은 독자적으로이를 수행 할 수 없습니다. 더 복잡한 구문 분석이 필요합니다. –

    답변

    0

    은 완벽하지,이 코드를보십시오 :

    let re = /{.*?}[^\s]+/g; 
     
    let text = "{A}^{^} this is sample content {{A}_{22}}^{^} with more complex structure {A}_{X-1} {B+2}^{^} another content with multi level content {A+{B}^{^}}^{^}"; 
     
    
     
    text.match(re).map(m => { 
     
        let replacement = m; 
     
        
     
        replacement = replacement.replace(/\^{\^}/g, ""); 
     
        replacement = replacement.replace(/{/g, "\\hat{"); 
     
        
     
        text = text.replace(m, replacement); 
     
    }); 
     
    
     
    console.log(text);

    +0

    첫 번째 시도가 제대로 작동하지 않아 삭제했습니다. 여기 또 다른 시도가 있습니다. –

    -1

    내가 올바르게 문제를 이해한다면, 그것은 게으른 한정어가 올바른 방향으로 게으르지 않다는 것입니다. 당신은 {A}를 잡으려면 {A}_{X-1} {B+2}^{^} 문자열의

    _ {X-1} {B + 2}^{^}하지만이 시작 괄호를보고합니다 {A} _ {X-1} {B + 2}^{^}. 당신이 또한 작동하는 어떤 공백 문자를 허용 할 경우,

    \{([^\{]*?)\}\^\{\^\} 
    

    나 :

    하나의 솔루션은 다음과 같이 문자열에 {을 허용하는 것입니다.

    관련 문제