2016-11-08 171 views
0

此函数当前使用正则表达式从字符串中删除所有表情符号字符。我该如何反转这一点,以便除去表情符号中的所有字符?如何从字符串中除去表情符号中的所有字符

var ranges = [ 
 
    '\ud83c[\udf00-\udfff]', // U+1F300 to U+1F3FF 
 
    '\ud83d[\udc00-\ude4f]', // U+1F400 to U+1F64F 
 
    '\ud83d[\ude80-\udeff]' // U+1F680 to U+1F6FF 
 
]; 
 

 
function removeEmoji() { 
 
    var str = $('#emoji').html(); 
 
    
 
    str = str.replace(new RegExp(ranges.join('|'), 'g'), ''); 
 
    $("#emoji").html(str); 
 
} 
 

 
$('button').on('click', function() { 
 
    removeEmoji(); 
 
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<ul id="emoji"> 
 
    <li></li> 
 
    <li>or Smiling Face</li> 
 
    <li>or Smiling Face</li> 
 
    <li>or Smiling Face</li> 
 
    <li></li> 
 
    <li>or Smiling Face</li> 
 
    <li>or Smiling Face</li> 
 
    <li>or Smiling Face</li> 
 
</ul> 
 

 
<button>Push Me</button>

+1

尝试'STR = str.replace(新正则表达式( “(” + ranges.join( '|')+ “)|。”, 'G'), '$ 1' );'。或者,为了保护标签,'str = str.replace(new RegExp(“(<[^<]*?> |”+ ranges.join('|')+“)|。”,'g'),'$ 1');' –

+0

这就是一个很好的答案,@WiktorStribiżew - 你应该把它作为一个! – Bill

回答

0

只是str.match()取代str.replace()

请注意,我已从您的答案中复制了此代码段,并且它正在获取并替换整个<ul>的html。这包括<li>元素。

var ranges = [ 
 
    '\ud83c[\udf00-\udfff]', // U+1F300 to U+1F3FF 
 
    '\ud83d[\udc00-\ude4f]', // U+1F400 to U+1F64F 
 
    '\ud83d[\ude80-\udeff]' // U+1F680 to U+1F6FF 
 
]; 
 

 
function removeEmoji() { 
 
    var str = $('#emoji').html(); 
 
    
 
    str = str.match(new RegExp(ranges.join('|'), 'g'), ''); 
 
    $("#emoji").html(str); 
 
} 
 

 
$('button').on('click', function() { 
 
    removeEmoji(); 
 
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<ul id="emoji"> 
 
    <li></li> 
 
    <li>or Smiling Face</li> 
 
    <li>or Smiling Face</li> 
 
    <li>or Smiling Face</li> 
 
    <li></li> 
 
    <li>or Smiling Face</li> 
 
    <li>or Smiling Face</li> 
 
    <li>or Smiling Face</li> 
 
</ul> 
 

 
<button>Push Me</button>

相关问题