用Angular过滤器将所有下划线替换为空格

26
我需要一个过滤器来将字符串中的所有下划线替换为空格。

我需要一个过滤器来将字符串中的所有下划线替换为空格。

6个回答

44

string.replace不仅接受字符串作为第一个参数,还可以接受正则表达式作为第一个参数。因此,将_放在正则表达式分隔符/中,并添加g修饰符。g称为全局修饰符,将在全局范围内进行替换。

App.filter('underscoreless', function () {
  return function (input) {
      return input.replace(/_/g, ' ');
  };
});

2
如果 input 不是字符串,或者 input 为 null 或未定义,则会失败。 - Max
简单,只需使用if语句进行条件检查。 - Avinash Raj

23

这里是一个通用的替换过滤器替代方案。

App.filter('strReplace', function () {
  return function (input, from, to) {
    input = input || '';
    from = from || '';
    to = to || '';
    return input.replace(new RegExp(from, 'g'), to);
  };
});

在你的HTML中按如下方式使用:

{{ addText | strReplace:'_':' ' }}

小提示:任何在to参数中的HTML标签会导致表达式失败,这是由于Angular内容安全规则引起的。


我应该在哪里添加App.filter代码?这是哪个版本的Angular? - Sujay U N
这是针对AngularJS 1.x的。这里的App表示从创建Angular应用程序后返回的对象,如下所示:var App = angular.module('myApp', ['some-dependency', 'some-other-dependency']); - John Rix

7

在某些情况下,您可以使用split()函数。
.replace函数不符合正则表达式语法(即.replace(/,/g,'\n')语法)

完整语法:
{{myVar.toString().split(',').join('\n')}}

.toString()函数适用于myVar在Typescript中未被定义为字符串类型的情况。


1
这是完美的答案,简单而且优化。 - Alexis

1
这个简单的函数可以实现它:

public getCleanedString(cadena) {
    cadena = cadena.replace(/_/g, ' ');
    return cadena;
  }

1
你正在回答哪个问题?他们想用空格替换下划线。 - Toto

1

有一种更简单的方法:

您可以在不定义过滤器的情况下替换它。这就是方法。

此示例仅用于在视图中进行替换。

{{ value.replace(/_/g, ' ') }}

我希望它能在简单的更改方面提供帮助,如果你想在更多地方进行更改,请使用过滤器。

1
BratisLatas,我喜欢你的方法,但是它只替换一个实例,而不是多个。 - mediaguru
3
我认为这不是一个有效的 Angular 表达式。如果第一个参数是字符串,它可以工作,但如果使用正则表达式,我会收到“语法错误:标记“/”不是主要表达式”的消息。 - jjmontes
适用于单个字符替换的功能表现良好。 - Himanshu S Shankhala

0

这是我在 AngularJS 1.4.7 中使用的

<li ng-show="filter.degree.length"> 
    <label>Search by Degree :- </label> {{
        filter.degree.toString().split('|').join(', ')
    }} 
</li>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接