Javascript 如果不是';t前面加反斜杠?

Javascript 如果不是';t前面加反斜杠?,javascript,regex,markdown,regex-lookarounds,negative-lookbehind,Javascript,Regex,Markdown,Regex Lookarounds,Negative Lookbehind,我正在寻找匹配加粗的降价。以下是一些例子: qwer*asdf*zxcv匹配*asdf* qwer*asdf*zxcv匹配*asdf* qwer\*asdf*zxcv不匹配 *qwer*asdf zxcv匹配*qwer* 像这样的反面外观(?有效 只是Firefox不支持浏览器,所以我不能使用它 类似地,我可以非常接近(^ |[^\\])\*(.*)\* 问题是有两个捕获组,我需要第二个捕获组的索引,Javascript只返回第一个捕获组的索引。在这种情况下,我只需添加1就可以解决这个问题,但在

我正在寻找匹配加粗的降价。以下是一些例子:

qwer*asdf*zxcv
匹配
*asdf*

qwer*asdf*zxcv
匹配
*asdf*

qwer\*asdf*zxcv
不匹配

*qwer*asdf zxcv
匹配
*qwer*

像这样的反面外观
(?有效

只是Firefox不支持浏览器,所以我不能使用它

类似地,我可以非常接近
(^ |[^\\])\*(.*)\*

问题是有两个捕获组,我需要第二个捕获组的索引,Javascript只返回第一个捕获组的索引。在这种情况下,我只需添加1就可以解决这个问题,但在其他情况下,这种攻击将不起作用

我这样做的理由是,我试图用React组件替换标记的一小部分。例如,我试图转换此字符串:

qwer*asdf*zxcv*123*

在该阵列中:

[“qwer”、asdf、“zxcv”、123]


其中第二个和第四个元素通过JSX创建并作为数组元素包含。

这应该可以做到:

/(?:^[^\\])(\*[^*]+[^\\]\*])/


唯一的捕获组是被*包围的字符串。

这应该可以做到:

/(?:^[^\\])(\*[^*]+[^\\]\*])/


唯一的捕获组是由*包围的字符串。

您还需要考虑,当反斜杠出现在星号之前时,它本身可能会被反斜杠转义,在这种情况下,星号应被视为粗体标记的开始。除非该星号前面也有反斜杠

所以我建议使用这个正则表达式:

((?:^[^\])(?:\\)*)\*((\\.\.[^*]))\*

如果目的是用标签替换这些内容,比如
..
,那么只需使用JavaScript的
替换
,如下所示:

让s=String.raw`now*这是粗体*,\\\*这也是\\*,但\\\\*这\*不是`;
控制台日志;
设正则表达式=/((?:^^[^\])(?:\\)*)\*((\\.\.\\[^*])*)\*/g;
让res=s.replace(regex,“$1$2”;

console.log(res);
您还需要考虑,当反斜杠出现在星号之前时,它本身可能会被反斜杠转义,在这种情况下,星号应被视为粗体标记的开始。除非该星号前面也有反斜杠,…等等

所以我建议使用这个正则表达式:

((?:^[^\])(?:\\)*)\*((\\.\.[^*]))\*

如果目的是用标签替换这些内容,比如
..
,那么只需使用JavaScript的
替换
,如下所示:

让s=String.raw`now*这是粗体*,\\\*这也是\\*,但\\\\*这\*不是`;
控制台日志;
设正则表达式=/((?:^^[^\])(?:\\)*)\*((\\.\.\\[^*])*)\*/g;
让res=s.replace(regex,“$1$2”;


console.log(res)
啊,我不知道非捕获组是这样存在的。谢谢!是的!如果你用
?:
创建一个组,它会使它成为非捕获组。啊,该死的,我的正则表达式在OP中仍然存在一个原始问题,JavaScript匹配结果的
索引
指的是完整匹配,其中包括空格。因此它仍然是off-by-one。您使用索引做什么?函数
match
将为您返回匹配的捕获组。也许有更好的方法来处理该索引。如果确实需要索引,请编辑,您可以通过删除
?:
进行第一组捕获,然后获取索引加上f的长度irst capture。我正在尝试用React组件替换字符串中的该项。我认为另一种方法可能类似于
(.*)(?:^ |[^\\])(\*[^*]+[^\\]\*)(.*)
,然后我可以执行
[组(1),组(2),组(3)]
,但该组仍然存在缺少一个字符的问题,因此无法正确重建。啊,我不知道存在这样的非捕获组。谢谢!是的!如果您使用
?:
启动一个组,它将成为非捕获组。啊,该死,我的正则表达式在OP中仍然存在原始问题,即
索引JavaScript匹配结果的ode>指的是包含空格的完整匹配。因此它仍然是一个接一个的。您使用索引的目的是什么?函数
match
将为您返回匹配的捕获组。也许有更好的方法来处理该索引。如果您确实需要索引,可以进行编辑第一组捕获是通过删除
?:
,然后获取索引加上第一次捕获的长度。我正试图用一个React组件替换字符串中的该项。我认为另一种方法可能类似于
(.*)(?:^ |[^\\])(\*[^*]+[^\\]\*(.*)
,然后我可以执行
[group(1),group(2),第(3)组]
,但该项仍然存在缺少一个字符的问题,因此无法正确重建。不幸的是,我无法使用字符串替换,因为这些项必须是数组中的真实JSX项。这是因为我用自定义React组件替换了一些标记。
replace
将回调作为第二个参数,其中y你可以随意注入。是的,但回调函数的返回值必须是字符串,不是吗?据我所知,我不能注入文本React组件或数组作为字符串的替换。如果你编辑你的问题并显示你当前的React代码,我可能会建议如何将其与此对齐。当然,我会这样做很遗憾,我不能使用字符串替换,因为这些项必须是数组中真正的JSX项。这是bec