如何在javascript中编写regexp来查找:smile:?
我想用JavaScript编写一个正则表达式,用于查找以如何在javascript中编写regexp来查找:smile:?,javascript,regex,Javascript,Regex,我想用JavaScript编写一个正则表达式,用于查找以开头和结尾的字符串: 例如“你好:微笑::睡眠:”从这个字符串中,我需要找到以:字符开头和结尾的字符串。我尝试了下面的表达式,但不起作用: ^:.*\:$ 我猜你不仅要找到字符串,还要替换它。为此,您应该考虑在regexp中结合使用捕获和替换函数 const emojiPattern = /:(\w+):/g function replaceEmojiTags(text) { return text.replace(emojiP
开头和结尾的字符串:
例如“你好:微笑::睡眠:”
从这个字符串中,我需要找到以:
字符开头和结尾的字符串。我尝试了下面的表达式,但不起作用:
^:.*\:$
我猜你不仅要找到字符串,还要替换它。为此,您应该考虑在regexp中结合使用捕获和替换函数
const emojiPattern = /:(\w+):/g
function replaceEmojiTags(text) {
return text.replace(emojiPattern, function (tag, emotion) {
// The emotion will be the captured word between your tags,
// so either "sleep" or "sleeping" in your example
//
// In this function you would take that emotion and return
// whatever you want based on the input parameter and the
// whole tag would be replaced
//
// As an example, let's say you had a bunch of GIF images
// for the different emotions:
return '<img src="/img/emoji/' + emotion + '.gif" />';
});
}
该模式查找任何后跟零个或多个连字符实例的单词。它将匹配以下任意一项:“微笑”、“大大的微笑”、“大大的微笑”。的
^
和$
分别是(开始和结束)。这会导致正则表达式显式匹配整个字符串,该字符串以:
开头,中间有任何内容,以:
结尾
如果要匹配字符串中的字符,可以删除定位
您的*
指示零或更多,因此您也将匹配:
。最好将其更改为+
,这意味着一个或多个。事实上,如果您只是在查找文本,您可能希望使用带有不区分大小写修饰符的范围[a-z0-9]
如果我们把它们放在一起,我们将有这样的正则表达式/:([a-z0-9]+):/gmi
将以:
开头的字符串与任何以:
结尾的字母数字字符进行一次或多次匹配,并全局使用修饰符g
,m
多行和i
区分大小写,例如:FacePalm:
在JavaScript中使用它,我们可以得到:
var mytext = 'Hello :smile: and jolly :wave:';
var matches = mytext.match(/:([a-z0-9]+):/gmi);
// matches = [':smile:', ':wave:'];
找到的每个匹配项都有一个数组。Regex101.com通常会向您解释正则表达式不起作用的原因,例如:正如@DavidThomas所说,您的reg-ex中的“^”和“$”部分似乎给您带来了问题。该网站解释了原因。你是想替换它们还是只想得到它们?不管怎样,
:*?:
和:[^::]*:
都可以。关于“你好:微笑:睡觉:”
或“你好:微笑睡觉:”
?谢谢您的回复。这个对我来说很好,现在,我需要接受“-”,以及我可以如何改变,请帮助我。:)补充我的回答
const emojiPattern = /:(\w+(-\w+)*):/g
var mytext = 'Hello :smile: and jolly :wave:';
var matches = mytext.match(/:([a-z0-9]+):/gmi);
// matches = [':smile:', ':wave:'];