Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在javascript中编写regexp来查找:smile:?_Javascript_Regex - Fatal编程技术网

如何在javascript中编写regexp来查找:smile:?

如何在javascript中编写regexp来查找:smile:?,javascript,regex,Javascript,Regex,我想用JavaScript编写一个正则表达式,用于查找以开头和结尾的字符串: 例如“你好:微笑::睡眠:”从这个字符串中,我需要找到以:字符开头和结尾的字符串。我尝试了下面的表达式,但不起作用: ^:.*\:$ 我猜你不仅要找到字符串,还要替换它。为此,您应该考虑在regexp中结合使用捕获和替换函数 const emojiPattern = /:(\w+):/g function replaceEmojiTags(text) { return text.replace(emojiP

我想用JavaScript编写一个正则表达式,用于查找以
开头和结尾的字符串:

例如
“你好:微笑::睡眠:”
从这个字符串中,我需要找到以
字符开头和结尾的字符串。我尝试了下面的表达式,但不起作用:

^:.*\:$

我猜你不仅要找到字符串,还要替换它。为此,您应该考虑在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:'];