2017-04-24 17 views
2

{すべてのコンテンツ}^{^}\ hat {all-content}に置き換えようとしています。そして、文字列と予想される出力は、ここでカスタムブラケットを特定のコンテンツに置き換えます。

|---------------------|-------------------|-------------------| 
| 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}}^{^} | 
|---------------------|-------------------|-------------------| 

...のような正規表現でなければなりません。..

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)

更新: {...} - - >には、任意の文字、特殊文字またはユニコード記号を使用できます。ネストされた中括弧の複数のレベルも含まれます。

これは正規表現で可能ですか?ない場合には、各試合は^{^}{の同じ番号が含まれていますが、ほとんどの場合で動作するはずと仮定しているため、他の選択肢..

+0

「** words **」では、オープニング '{...} 'の内容のルールは何ですか。 –

+0

{...}は[tex](https://en.wikipedia.org/wiki/TeX)形式になります...一般的に特殊文字とユニコード記号を含む任意の文字 – mimind

+0

4番目の例ではネストされた構造体の場合、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}_{X-1} {B+2}^{^}あなたは{A} _ {X-1} {B + 2}^{^}をキャッチしたいが、それは始まる括弧を見て、{A} _ {X-1}をとる中

{B + 2}^{^}

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

か、あなたが任意の空白文字を禁止したい場合は、それもうまくいく:

一つの解決策は、このように、文字列で{を禁止することです。

関連する問題