suchen

Heim  >  Fragen und Antworten  >  Hauptteil

Regulärer Ausdruck zum Ersetzen mehrerer Symbole durch HTML-Tags

Ich versuche, einen regulären Ausdruck zu erstellen, der alle Symbole „$$“ durch einige HTML-Tags ersetzt, wie zum Beispiel <someTag></someTag>.

Ich verwende diesen regulären Ausdruck, aber er deckt nicht alle Fälle ab:

1

$$(\S[^\*]+\S)$$

1

2

3

'aaa $3$$ c$ ddd'.replace(/$$(\S[^\*]+\S)$$/g, '<a1></a1>') // works

 

'aaa $3$$ c$ $$ddd$$'.replace(/$$(\S[^\*]+\S)$$/g, '<a1></a1>') // doesn't work, should be 'aaa <a1>123</a1> c$ <a1>ddd</a1>'

1

2

3

console.log('aaa $3$$ c$ ddd'.replace(/$$(\S[^\*]+\S)$$/g, '<a1></a1>')) // works

 

console.log('aaa $3$$ c$ $$ddd$$'.replace(/$$(\S[^\*]+\S)$$/g, '<a1></a1>')) // doesn't work, should be 'aaa <a1>123</a1> c$ <a1>ddd</a1>'

1

 

P粉362071992P粉362071992335 Tage vor607

Antworte allen(2)Ich werde antworten

  • P粉739886290

    P粉7398862902024-04-02 13:41:43

    不是正则表达式解决方案,但它有效。说明:使用分隔符 ($$) 分割字符串。然后创建一个新字符串 result 并插入数组的每个部分。然后检查当前索引是奇数还是偶数,并根据情况添加开始标记 (prefix) 或结束标记 (suffix)。我希望这有帮助!

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    28

    function replaceTag(string, delimiter, prefix, suffix){

       

      let parts = string.split(delimiter);

      let result = '';

       

      for(let index = 0; index < parts.length; index++){

       

        result += parts[index];

       

        if(index % 2 == 0 && index < parts.length - 1){

         

          result += prefix;

         

        }

        else if(index < parts.length - 1){

         

          result += suffix;

         

        }

       

      }

       

      return result;

     

    }

     

    console.log(replaceTag('aaa $$123$$ c$ ddd', '$$', '<my-tag>', '</my-tag>'));

    console.log(replaceTag('aaa $$123$$ c$ $$ddd$$', '$$', '<my-tag>', '</my-tag>'));

    Antwort
    0
  • P粉592085423

    P粉5920854232024-04-02 09:46:01

    最快的方法是使用非贪婪的点全方法:/\$\$(.*?)\$\$/sg
    https://regex101.com/r/upveAX/1
    单独使用点总是会更快,因为它不依赖于断言或类结构,
    这会增加 3 倍的性能开销。

    1

    2

    3

    console.log('aaa $$123$$ c$ ddd'.replace(/\$\$(.*?)\$\$/sg, '<a1>$1</a1>'));

     

    console.log('aaa $$123$$ c$ $$ddd$$'.replace(/\$\$(.*?)\$\$/sg, '<a1>$1</a1>'));

    Antwort
    0
  • StornierenAntwort