【问题标题】:Remove emoji but not non english chars删除表情符号但不删除非英文字符
【发布时间】:2018-02-13 10:43:09
【问题描述】:

我试图从字符串中删除所有表情符号字符,下面的代码工作正常,除了它也删除了非英文字符,我该如何避免这种情况?

var ranges = [
  '[\u00A0-\u269f]',
  '[\u26A0-\u329f]',
  '[????-????]'
];


$('#submit').on('click', function() {
  var str = $('#text').val();
  str = str.replace(new RegExp(ranges.join('|'), 'ug'), '');
  $("#text").val(str);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="text" id="text"/>
<input type="submit" id="submit" value="clear"/>

测试用表情符号示例:⛔️???? 非英语示例:آ

【问题讨论】:

  • 您正在匹配三个范围,其中一个从 U+00A0 开始:即。其中重音字符(和组合重音)的代码点被编码。尝试减少到​​表情符号范围。
  • 维基百科有一个entry

标签: javascript jquery


【解决方案1】:

这是一个具有广泛字符范围的单一模式:

/[^ -\u2122]+ +| *[^ -\u2122]+/ug

我的方法基本上是从这个 php 答案中移植的:https://stackoverflow.com/a/43106144/2943403

它将一次删除一个或多个表情符号,并在一侧(但不能同时删除两个)。

$('#submit').on('click', function() {
  $("#after").html($('#before').val().replace(/[^ -\u2122]+ +| *[^ -\u2122]+/ug,''));
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<textarea id="before" cols="75" rows="5">Sample emoji for test: ⛔️? Sample non english: آ Kilian à Dijon #4 • Vlog #2 • Primark again !? ? - YouTube Funfesty ? ? on Twitter: "Je commence à avoir mal à la tête à force Sia 2017 Cheap Thrills 2017 live ??</textarea><br>
<input type="submit" id="submit" value="Remove Emojis"/><br>
<textarea id="after" cols="75" rows="5"></textarea>

我将为那些对我的回答有问题/疑虑的人添加更新:

这是一个替代的正则表达式模式声明,模式本身可以扩展为包含 ascii 表中较低的字符(包括换行符):

$('#submit').on('click', function() {
  var r = new RegExp(/[^\u0000-\u2122]+ +| *[^\u0000-\u2122]+/, "ug");
  $("#after").html($('#before').val().replace(r,''));
});

JSFiddle Demo

【讨论】:

  • 感谢您的回答,但是当我在工作区 (visual studio) 中复制您的代码时,它会返回一个错误,同样出现在 jsfiddle 但不在浏览器控制台日志中。Expected ')' and instead saw 'ug'.
  • 小提琴的其余部分在哪里?
  • 这里是一个盲猜:尝试在每个 ` \ ` 之前添加一个额外的 ` \ `。
  • 看起来u在这里没用,删除它,修复它。但是这个答案的另一个问题是,它也删除了新行,但是用'\n' 替换'' 可能对你有帮助,但不是干净的。
  • 正则表达式声明的替代语法:jsfiddle.net/6ha01nsb/5 我将粘贴这两行以便于阅读:var r = new RegExp(/[^ -\u2122]+ +| *[^ -\u2122]+/, "g"); $("#after").html($('#before').val().replace(r,''));
猜你喜欢
  • 2011-04-08
  • 2017-08-23
  • 1970-01-01
  • 2014-06-20
  • 1970-01-01
  • 1970-01-01
  • 2021-10-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多