【问题标题】:Angularjs Filter - remove character if appears more than onceAngularjs过滤器 - 如果出现不止一次,则删除字符
【发布时间】:2014-06-29 20:09:12
【问题描述】:

在这玩了几个小时,没有任何突破。

我有一个不同分钟的时间表

4' 10' 等等

但有些上面有附属物

5'+1' 8'+2'

我已经像这样设置了过滤器:

angular.module('myApp').filter('addedTime', function(){
      return function(text) {
       var newText = text.replace(/\+.*$/, '<sup class="additional">$&</sup>');
       console.log(newText);

       return newText;
  };
});'

如您所见,它为加法时间添加了一个上标。但是我想从中删除最后的 ' (单引号),我无法弄清楚如何在不影响正常时间(4'、6'等)的情况下做到这一点。

我考虑过将其完全拆分并重新加入,但不确定这是否值得.. 任何建议都值得赞赏。

编辑: 本质上我是想让它看起来像

<ul>
   <li>5'</li>
   <li>5'<sup>+2</sup></li>
<ul>

(注意+2后面没有单引号)

【问题讨论】:

  • 你能告诉我们你在5'+1' 8'+2'上执行操作时的预期输出吗?
  • 或许text.replace(/(\+\d+)(\')/g, '&lt;sup class="additional"&gt;$1&lt;/sup&gt;')

标签: javascript angularjs replace slice


【解决方案1】:

replace 中使用回调怎么样?

var newText = text.replace(/\+([0-9]*)\'/g, function(a) {
    return '<sup class="additional">'+a.substring(1, a.length - 1) +'</sup>'
});

您首先会发现“添加”时间,因为它们是一个加号,后跟一个数字和一个引号。然后你修改这个组。

给定var text = "5'+1' 8'+2'"; 它返回

5'<sup class="additional">1</sup> 8'<sup class="additional">2</sup>

另一种选择:

var newText = text.replace(/\+(\d)\'/g, '<sup class="additional">$1</sup>')

返回5'&lt;sup class="additional"&gt;1&lt;/sup&gt; 8'&lt;sup class="additional"&gt;2&lt;/sup&gt;

【讨论】:

  • var newText = text.replace(/\+(\d)\'/g, '$1') 完美运行!我通过拆分数组解决了这个问题,花了 8 行代码。这更整洁!需要更详细地学习正则表达式替换!
猜你喜欢
  • 1970-01-01
  • 2022-06-21
  • 2012-02-01
  • 2020-06-08
  • 1970-01-01
  • 2022-01-20
  • 1970-01-01
  • 1970-01-01
  • 2019-06-02
相关资源
最近更新 更多