如何编写正则表达式以在JavaScript中查找:smile :?

时间:2018-08-21 16:44:52

标签: javascript regex

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

例如,从该字符串"hello :smile: :sleeping:"开始,我需要找到以:字符开头和结尾的字符串。我尝试了以下表达式,但没有用:

^:.*\:$

2 个答案:

答案 0 :(得分:1)

我的猜测是,您不仅要查找字符串,而且还要替换它。为此,您应该考虑在正则表达式中结合使用捕获功能和替换功能。

None

使用该代码,您可以在任何输入字符串上运行函数,并替换标签以获取其中实际图像的HTML。如您的示例:

tests = [
  [ [1,0,1] , [0,1,1] ],
  [ [1,0,1] , [0,0,1] ], //breaks on this one...
  [ [2,3,3] , [2,2,3] ], //breaks on this one also...
  [ [1,2,3] , [2,1,3] ],
  [ [2,3,1] , [1,2,2] ],
  [ [2,2,1] , [1,3,2] ]
]

tests.forEach(function(test) {
  console.log('eqArraySets( '+test[0]+' , '+test[1]+' ) = '+eqArraySets( test[0] , test[1] ));
});


function eqArraySets(a, b) {
	if ( a.length !== b.length ) { return false; }
	for ( var i = a.length; i--; ) {
		if ( !(b.indexOf(a[i])>-1) ) { return false; }
		if ( !(a.indexOf(b[i])>-1) ) { return false; }
	}
	return true;
}

编辑:要在情感中支持连字符,就像在“大微笑”中一样,该模式需要更改,因为它只是在寻找单词字符。为此,可能还存在一个限制,即连字符必须连接两个单词,以使其不应接受“ -big-smile”或“ big-smile-”。为此,您需要将模式更改为:

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" />'; 
    });
}

该模式正在寻找任何单词,然后跟随零个或多个连字符实例,再跟一个单词。它将与以下任意一项匹配:“微笑”,“大微笑”,“大微笑更大”。

答案 1 :(得分:0)

^$anchors(分别是开始和结束)。这会使您的正则表达式明确匹配以:开头且以:结尾的整个字符串。

如果要匹配字符串中的字符,可以删除锚点。

您的*表示零或多个,因此您也将匹配::。最好将其更改为+,这意味着一个或多个。实际上,如果您只是在寻找文本,则可能需要使用不区分大小写的修饰符的范围[a-z0-9]

如果将所有内容放在一起,我们将获得像/:([a-z0-9]+):/gmi

这样的正则表达式

将以:开头的字符串与任何以字母或数字结尾的字母数字字符匹配一次或多次,并以:全局结束符,g多行和{{1 }}对m之类的字符不区分大小写。

在JavaScript中使用它可以得到以下结果:

i

您将拥有一个数组,其中找到每个匹配项。