匹配笑脸图释,除了蜱或三蜱之外

时间:2017-03-18 13:12:05

标签: javascript regex

我正在尝试匹配一个笑脸图释(和其他人,但我可以从这里开始)。我能做什么:

/:-\)/g

没什么大不了的。我不希望在单个刻度之间匹配笑脸。

`

或者当它处于三重滴答之间时

```

所以不要匹配:

`:-)`

或者

`some stuff :-) some other stuff`

并且不匹配

```
:-)
```

当那里还有其他东西时:

```
import somelib

x + 2
:-)
yada yada
```

我的尝试如下:

/(?!\`.*|\`\`\`.*):-\)(?!\`|\`\`\`)/gm

我尝试做一个负向前瞻,并在其间用一些东西跳过勾号,但我似乎无法让它发挥作用。

更清楚:

输入:

:-)

应匹配

输入:

`:-)`

不匹配

输入:

```
:-)
```

不匹配

输入:

`something :-) something`

不匹配

输入:

```
something
:-)
something
```

不匹配

最后,我想用它的表情符号替换笑脸:\uD83D\uDE03

1 个答案:

答案 0 :(得分:2)

在JS正则表达式中不可能跳过匹配。常见的方法是匹配和捕获您需要保留的内容,并匹配您需要替换的内容。

使用

var regex = /(```[\s\S]*?```|`[\s\S]*?`)|:-\)/g;
var res = str.replace(regex, function($0,$1) {
  return $1 ? $1 : '\uD83D\uDE03';
  }
);

正则表达式将匹配并捕获组1中单个或三个反引号之间的任何文本,并在其将被替换的所有其他上下文中匹配笑脸。