表情符号的正则表达式

时间:2015-06-21 14:41:48

标签: javascript regex replace emoji

http://jsfiddle.net/bxeLyneu/1/

function custom() {
var str = document.getElementById('original').innerHTML;
var replacement = str.replace(/\B:poop:\B/g,'REPLACED');
document.getElementById('replaced').innerHTML = replacement;
}
custom()

是=:大便:应替换为"更换" 否=:大便:不应该被替换。换句话说,保持不变。

第4,5,6号似乎不遵循所提供的规则。我知道为什么,但我不知道如何将多个表达式合并为一个。 我尝试了很多其他的但是我不能让它们像我希望的那样工作。赔率不利于我。

是的,这与Facebook聊天框中的表情符号非常相似。

新问题:

enter image description here

http://jsfiddle.net/xaekh8op/13/

/(^|\s):bin:(\s|$)/gm

无法扫描并替换中间的那个。 我该如何解决这个问题?

1 个答案:

答案 0 :(得分:4)

\B表示“任何位置不在单词边界”,而\s表示“空白”。根据您给出的示例,以下代码可以很好地运行。

function custom() {
    var str = document.getElementById('original').innerHTML;
    var replacement = str.replace(/([\s>]|^):poop:(?=[\s<]|$)/gm,'$1REPLACED');
    document.getElementById('replaced').innerHTML = replacement;
}
custom()

http://jsfiddle.net/xaekh8op/15/

<强>解释

正则表达式([\s>]|^):poop:(?=[\s<]|$)代表以下内容:

Regular expression visualization(在Debuggex中创建的图像)

在开始时选择\s>之一(或使用^表示行的开头),并将其分组为第1组,我们稍后可以使用它。同样适用于:poop:\s<或行尾$)之后。但是,第二次,它是使用前瞻((?= ...)是语法)来完成的,它会检查[\s<]|$部分之后是否存在,但它在替换中不会消耗它。 <>会处理可能位于:poop:旁边的所有HTML标记。替换字符串$1中的$1REPLACED将第一个组放回,从而仅将:poop:替换为REPLACED。第二个“小组”只是一个前瞻,因此不需要更换。

有关字边界的更多信息,请参阅http://www.regular-expressions.info/wordboundaries.html,其中包含:

  

有三种不同的职位符合词边界:

     
      
  • 在字符串中的第一个字符之前,如果第一个字符是单词字符。
  •   
  • 在字符串中的最后一个字符之后,如果最后一个字符是单词字符。
  •   
  • 字符串中的两个字符之间,其中一个是单词字符,另一个不是单词字符。
  •