我正在尝试匹配一个笑脸图释(和其他人,但我可以从这里开始)。我能做什么:
/:-\)/g
没什么大不了的。我不希望在单个刻度之间匹配笑脸。
`
或者当它处于三重滴答之间时
```
所以不要匹配:
`:-)`
或者
`some stuff :-) some other stuff`
并且不匹配
```
:-)
```
当那里还有其他东西时:
```
import somelib
x + 2
:-)
yada yada
```
我的尝试如下:
/(?!\`.*|\`\`\`.*):-\)(?!\`|\`\`\`)/gm
我尝试做一个负向前瞻,并在其间用一些东西跳过勾号,但我似乎无法让它发挥作用。
更清楚:
输入:
:-)
应匹配
输入:
`:-)`
不匹配
输入:
```
:-)
```
不匹配
输入:
`something :-) something`
不匹配
输入:
```
something
:-)
something
```
不匹配
最后,我想用它的表情符号替换笑脸:\uD83D\uDE03
。
答案 0 :(得分:2)
在JS正则表达式中不可能跳过匹配。常见的方法是匹配和捕获您需要保留的内容,并匹配您需要替换的内容。
使用
var regex = /(```[\s\S]*?```|`[\s\S]*?`)|:-\)/g;
var res = str.replace(regex, function($0,$1) {
return $1 ? $1 : '\uD83D\uDE03';
}
);
正则表达式将匹配并捕获组1中单个或三个反引号之间的任何文本,并在其将被替换的所有其他上下文中匹配笑脸。