【问题标题】:String replace regex, removing symbols from facebook content字符串替换正则表达式,从 facebook 内容中删除符号
【发布时间】:2015-11-18 20:24:11
【问题描述】:

您好,我想知道如何过滤掉这些自定义 Facebook 符号。

CULTURE CLUB PRESENTS JENNIFER CARDINI
▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬

We proudly presents JENNIFER CARDINI
Support by Monsieur Moustache & Thang



▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
LINE-UP
▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬

#TOWNHALL

▮ Monsieur Moustache

▮ Thang

▮ JENNIFER CARDINI


▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
JENNIFER CARDI ...

预期的结果是没有粗连字符和音乐符号的相同文本。

我对正则表达式知之甚少。我正在使用这个简单的功能,但我认为我需要另一种替换模式。

 function zonderRareSymbolen(str) {
   new_string = str.replace(/^([ A-Za-z0-9_@#+-.'"]+(\r)?(\n)?)*$/g, ''); 
   return new_string.toLowerCase();
 }

有可能吗?我已经尝试过将符号粘贴到替换模式中。 我不能使用只允许字母和数字的模式吗?

更新 如果我将文本放入以下内容,则此功能有效:

zonderRareSymbolen('... Kisses ▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬ Come ...');
function zonderRareSymbolen(str) {
  new_string = str.replace(/▬/g, ''); 
  return new_string;
 }

但不是我的 detail.description 来自对象的值:

zonderRareSymbolen(String(detail.desciption));
function zonderRareSymbolen(str) {
  new_string = str.replace(/▬/g, ''); 
  return new_string;
 }

有什么想法吗?

更新替换功能似乎不适用于自定义符号。 我现在能做的就是解决它,只允许这样的所需字符:

function zonderRareSymbolen(str) { return (str).replace(/[^a-zA-Z0-9- ,=?&:.'"@/]/g, ' '); }

已解决 作者:马里亚诺。输入<meta charset="UTF-8"> 后,我可以将符号随意粘贴到我的替换函数中并替换它们。

【问题讨论】:

  • 请提供主题字符串和预期结果。
  • 主题字符串是图像中的文本...预期结果是相同的文本,没有粗连字符和音乐符号
  • 没错,所以如果有人阅读您的帖子想要复制那个粗连字符以包含在正则表达式中,他应该猜猜图片中的内容是什么?如果有没有显示的 html 标签怎么办?不间断的空间呢?换行符在哪里?想想看。您要求人们帮助您解析文本,而您甚至没有给他们原始文本。
  • 感谢您添加主题。请注意我 edited 将文本格式化为代码的帖子...您提到您已经尝试在模式中使用 char 作为文字。你试过str.replace( /▬+\r?\n?/g, '').toLowerCase(); 吗?

标签: javascript regex string replace


【解决方案1】:

您没有将替换的值分配给detail.description。使用以下选项之一:

  1. 将返回的值分配给您的对象属性:

        var detail = {
            id: 'some id',
            description: ".... Kisses\n▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬\nCome ...."
        };
        function zonderRareSymbolen(str) {
            return str.replace(/\u25AC+\r?\n?/g, '');
        }
    
        //asign the returned value
        detail.description = zonderRareSymbolen(detail.description);
    
        //print object
        result.innerText = JSON.stringify(detail);
        <body><pre id="result"></pre></body>
  2. 通过共享调用,在函数上下文中引用您的对象属性:

        var detail = {
            id: 'some id',
            description: ".... Kisses\n▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬\nCome ...."
        };
        function zonderRareSymbolen(obj) {
            //obj is a reference to the object passed by value
            obj.description = obj.description.replace(/\u25AC+\r?\n?/g, '');
        }
    
        //call by sharing
        zonderRareSymbolen(detail);
    
        //print object
        result.innerText = JSON.stringify(detail);
    <body><pre id="result"></pre></body>

JavaScript 按值传递变量。但是对象的值实际上是一个引用,因此,在函数上下文中,其成员之一的更改将持续存在。详情请见Is JavaScript a pass-by-reference or pass-by-value language?

【讨论】:

  • 非常感谢您的努力!我仍然用你的代码测试了每一个可能性,但它不会影响我的对象。奇怪的是它不适用于我获取的对象,但它适用于静态对象。我发现替换不想使用未知符号......所以我宁愿使用这样的方法(detail.description).replace(/[^a-zA-Z-:. ]/g, ' ')
  • @Auguste 这与replace 或正则表达式无关。如果它在代码 sn-p 中适用于您,它适用于您的脚本。可能,当您调用此函数时,detail.description 尚未设置(是否通过asynchronous 调用设置?)。我建议在调用这个函数之前检查if (detail.description === undefined) 并从那里调试它。但是我无能为力,因为我没有你的代码来理解发生了什么......如果你不能调试它,我会问一个新问题,显示你的代码的相关部分.专注于detail,而不是replace
  • 我用信号量检查了它,如果调用完成我就执行,我知道它在这里完美地工作很奇怪。如果你真的想要我可以把代码发给你,我什么都试过了。每当我更改替换模式时,它都会起作用,只是不适用于条纹。所以我将使用解决方法,只允许某些字符。
  • 我还注意到它只适用于细节对象而不适用于它的属性?我不需要对整个对象进行字符串化。
  • @Auguste 我可以想象 2 种可能性:1. stripes 与您在问题中粘贴的字符不同(不太可能),或者2. detail.description 在您调用它时未定义,或者.description 不是属性,而是方法...由于我的解决方案适用于特定情况,我建议提出一个新问题并让社区检查您的问题,而不仅仅是我。
猜你喜欢
  • 2016-04-03
  • 1970-01-01
  • 2018-01-28
  • 2022-01-14
  • 2020-03-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多