正则表达式查找和替换冒号内的表情符号名称
Regex to find and replace emoji names within colons
我正在尝试编写一个正则表达式(用于 JavaScript 的正则表达式引擎),我可以使用它在文本中查找和替换冒号内的表情符号名称。就像在 Slack 或 Discord 中,当您键入 :smiley-face:
并在您提交聊天时它会替换它。我只针对文本节点,所以我不需要担心文本中的其他 html。
是否可以编写一个可以匹配以下所有规则的正则表达式? (用等宽块突出显示的文本 = 正则表达式匹配)
:any-non-whitespace:
:text1:
样本 2:
:@(1@#$@SD:
:s:
:nospace::inbetween:
因为中间有2个冒号
:nospace:
中间:nospace:
我从类似这样的东西开始,但它不完整
/:(?!:)\S+:/gim
我正在尝试考虑执行此操作可能发生的所有特殊情况。可能是我多虑了。
涉及很多 Twitch 表情,所以我不能使用表情符号 unicode 字符。正则表达式将找到匹配项并替换为标签
我第一个想到的是
:(::|[^:\n])+:
它匹配一个字符串,至少一个字符长,包括周围的冒号,由
- 两个冒号(
::
),或
- 不是冒号也不是换行符的字符。
但这基本上就是 Wiktor 作为(较慢的)替代品(评论)所拥有的。但无论如何我都会把它留在这里,因为它正在工作,而不是其他提交的答案 ;)
你想要这样的正则表达式吗?
(:(?![\n])[()#$@-\w]+:)
Demo, 其中可以在(?![\n])
的字符class中追加插入unallowed characters
,在(?![\n])
中追加插入allowed characters
字符 class [()#$@-\w]
我建议使用
:[^:\s]*(?:::[^:\s]*)*:
参见regex demo. It is the same pattern as :(?:[^:\s]|::)*:
, but a bit more efficient because the (?:..|...)*
part is 。
详情
:
- 冒号
[^:\s]*
- :
和空格 以外的 0+ 个字符
(?:
- 量化 non-capturing 组的开始:
::
- 双冒号
[^:\s]*
- :
和空格 以外的 0+ 个字符
)*
- 分组结束,重复 0 次或多次(由于 *
量词)
:
- 一个冒号。
试试这个正则表达式
/(^|\s)+:([^\s\n\r])+:|^:[^\s\n\r]+/g
我正在尝试编写一个正则表达式(用于 JavaScript 的正则表达式引擎),我可以使用它在文本中查找和替换冒号内的表情符号名称。就像在 Slack 或 Discord 中,当您键入 :smiley-face:
并在您提交聊天时它会替换它。我只针对文本节点,所以我不需要担心文本中的其他 html。
是否可以编写一个可以匹配以下所有规则的正则表达式? (用等宽块突出显示的文本 = 正则表达式匹配)
:any-non-whitespace:
:text1:
样本 2:
:@(1@#$@SD:
:s:
:nospace::inbetween:
因为中间有2个冒号
:nospace:
中间:nospace:
我从类似这样的东西开始,但它不完整
/:(?!:)\S+:/gim
我正在尝试考虑执行此操作可能发生的所有特殊情况。可能是我多虑了。
涉及很多 Twitch 表情,所以我不能使用表情符号 unicode 字符。正则表达式将找到匹配项并替换为标签
我第一个想到的是
:(::|[^:\n])+:
它匹配一个字符串,至少一个字符长,包括周围的冒号,由
- 两个冒号(
::
),或 - 不是冒号也不是换行符的字符。
但这基本上就是 Wiktor 作为(较慢的)替代品(评论)所拥有的。但无论如何我都会把它留在这里,因为它正在工作,而不是其他提交的答案 ;)
你想要这样的正则表达式吗?
(:(?![\n])[()#$@-\w]+:)
Demo, 其中可以在(?![\n])
的字符class中追加插入unallowed characters
,在(?![\n])
中追加插入allowed characters
字符 class [()#$@-\w]
我建议使用
:[^:\s]*(?:::[^:\s]*)*:
参见regex demo. It is the same pattern as :(?:[^:\s]|::)*:
, but a bit more efficient because the (?:..|...)*
part is
详情
:
- 冒号[^:\s]*
-:
和空格 以外的 0+ 个字符
(?:
- 量化 non-capturing 组的开始:::
- 双冒号[^:\s]*
-:
和空格 以外的 0+ 个字符
)*
- 分组结束,重复 0 次或多次(由于*
量词):
- 一个冒号。
试试这个正则表达式
/(^|\s)+:([^\s\n\r])+:|^:[^\s\n\r]+/g