正则表达式用于查找和替换冒号中的表情符号名称

时间:2018-04-10 04:28:13

标签: javascript regex emoji

我正在尝试编写一个正则表达式(用于JavaScript的正则表达式引擎),我可以用它来查找并替换冒号中表情符号名称的文本。当您键入:smiley-face:时,就像在Slack或Discord中一样,当您提交聊天时它会替换它。我只针对文本节点,所以我不需要担心文本中的其他html。

是否可以编写一个可以匹配以下所有规则的正则表达式? (用monospace blocks突出显示的文本=正则表达式正匹配)

:any-non-whitespace:
:text1: SAMPLE2:
:@(1@#$@SD: :s:
:nospace::inbetween:因为中间有2个冒号 :nospace: {中间{1}}

我从这样的事情开始,但它不完整

:nospace:

我正在考虑可能发生这种情况的所有特殊情况。也许我正在过度思考它。

有很多Twitch表情,所以我不能使用表情符号unicode字符。正则表达式将找到匹配项并替换为标记

4 个答案:

答案 0 :(得分:2)

我建议使用

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

请参阅regex demo。它与:(?:[^:\s]|::)*:具有相同的模式,但效率更高,因为(?:..|...)*部分为unrolled

<强>详情

  • : - 冒号
  • [^:\s]* - 除:和空格
  • 以外的0个字符
  • (?: - 开始量化的非捕获组:
    • :: - 双冒号
    • [^:\s]* - 除:和空格
    • 以外的0个字符
  • )* - 分组结束,重复0次或更多次(由于*量词)
  • : - 冒号。

答案 1 :(得分:0)

我的第一个想法是

:(::|[^:\n])+:

它匹配一个字符串,至少一个字符长,包括周围的冒号,由

组成
  • 两个冒号(::)或
  • 不是冒号的字符,也不是换行符。

但这基本上是Wiktor所拥有的(较慢的)替代方案(评论)。但是,无论如何我会把它留在这里,因为它正在工作,而不是其他提交的答案;)

See it here at regex101

答案 2 :(得分:0)

你想要这样的正则表达式吗?

list_filter = ['position']

Demo ,,,您可以另外将(:(?![\n])[()#$@-\w]+:) 插入unallowed characters的字符类,并将(?![\n])添加到字符类allowed characters中}

答案 3 :(得分:0)

尝试此regx

/(^|\s)+:([^\s\n\r])+:|^:[^\s\n\r]+/g