gpt4 book ai didi

Javascript 正则表达式帮助不匹配字符

转载 作者:行者123 更新时间:2023-11-30 18:40:52 26 4
gpt4 key购买 nike

我正在制作自己的 markdown 编辑器,它的粗体和斜体很像堆栈溢出:

// **bold**
Text = Text.replace(new RegExp("\\*\\*(.+?)\\*\\*", "g"), '<strong>$1</strong>');

// *italic*
Text = Text.replace(new RegExp("\\*(.+?)\\*", "g"), '<em>$1</em>');

现在的问题是,如果有人想在他们的文本中包含一系列星号,例如:

If you want to do A * B * C then...

结果如下:

A B C

Stackoverflow 在星号仅在星号之后不接触空格字符时才起作用的情况下做得很好。例如:

** Bold ** = not bold
**Bold** = bolded
* Italic * = not italic
*Italic* = italics

所以我尝试添加 [^ ] 以使其匹配一个有点错误的非空格字符:

// **bold**
Text = Text.replace(new RegExp("\\*\\*(.+?)\\*\\*", "g"), '<strong>$1</strong>');

// *italic*
Text = Text.replace(new RegExp("\\*[^ ](.+?)[^ ]\\*", "g"), '<em>$1</em>');

这似乎从 $1 的开头和结尾删除了一个字符,但除此之外它还有效。如何修改我的正则表达式,以便仅当其中包含的文本未用任何空格填充时才激活粗体和斜体?

编辑

// **bold**
Text = Text.replace(new RegExp("\\*\\*([^ ](.+?)[^ ])\\*\\*", "g"), '<strong>$1</strong>');

// *italic*
Text = Text.replace(new RegExp("\\*([^ ](.+?)[^ ])\\*", "g"), '<em>$1</em>');

但是测试用例:

this ** shouldnt be bold ** ewfwef

呈现为

this * shouldnt be bold * ewfwef

最佳答案

将字符类放入捕获组中:

([^ ].+?[^ ])

或更短一点(并考虑所有空格):

(\S.+?\S)

关于Javascript 正则表达式帮助不匹配字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6897142/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com