【问题标题】:Javascript RegEx failing (sometimes)Javascript RegEx 失败(有时)
【发布时间】:2018-04-08 09:36:04
【问题描述】:

我正在尝试将表情符号添加到我的基于网络的聊天网站,并尝试使用 RegExp 来做到这一点。

它在某些情况下有效,但在其他情况下无效,这让我发疯。

表情符号存储在数据库中 - 我通过 AJAX json 将它们拉出并处理生成的数组,并随时替换。以下是通过 F12 开发工具得到的响应:

当 emoticon.SymbolShortcut 值设置为 ':D' 时有效,但对 ':(' 无效。

有问题的表情对象包含:

emoticon.FileLocation = '<i class="material-icons emoticon" style="font-size:16x;">sentiment_very_satisfied</i>' //我知道这不是文件位置 - 对象命名错误:)

emoticon.SymbolShortcut = ':('

var sMarkup;
var strRegEx = '';

var pText ='some text :('

$.each(emoticonArray, function (index, emoticon) {
    strRegEx = emoticon.SymbolShortcut.replace(')', '[)]').replace('(', '[(]');

    var regEx = new RegExp(strRegEx, "gi");

    pText = pText.replace(strRegEx, emoticon.FileLocation);

});

总而言之,问题在于替换不适用于 ':(' 字符组合,但适用于 ':D'。

我希望 pText 变量 ':(' 中的字符被替换为 'sentiment_very_satisfied',但我得到的只是我提交的相同字符串,没有替换

提前致谢 - 欢迎提出所有建议。如果我能提供更多信息来解决这个最令人沮丧的难题,请大喊大叫。

【问题讨论】:

  • 您遇到了什么问题? “失败”、“不起作用”没有帮助。这是如何运作的?你能指望什么?请提供MCVE (minimal complete verifiable example)
  • 您好 Wiktor,问题是替换不适用于 ':(' 字符组合,但适用于 ':D'。我希望 pText 变量中的字符 ':('替换为 'sentiment_very_satisfied',但我得到的只是我提交的相同字符串,没有替换.
  • 尝试使用stackoverflow.com/a/3561711/3832970转义特殊字符
  • @Melbfella 你为什么要'some text :(' strRegEx = emoticon.SymbolShortcut.replace(')', '[)]').replace('(', '[(]'); 这样做?

标签: javascript regex


【解决方案1】:

在考虑 OP 流程的同时更新了答案:

var pText ='some text :('

strRegEx = `:(`.replace(')', '\\)').replace('(', '\\(');
var regEx = new RegExp(strRegEx, "i");
pText = pText.replace(regEx,`<i class="material-icons emoticon" style="font-size:16x;">sentiment_very_satisfied</i>`);
console.log(pText);

【讨论】:

  • 我猜反对票是因为没有解释正则表达式的工作原理,但答案对我来说似乎很清楚。
猜你喜欢
  • 2017-09-27
  • 2020-04-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-13
  • 1970-01-01
  • 1970-01-01
  • 2022-01-12
相关资源
最近更新 更多