正则表达式替换特殊字符

时间:2016-06-17 22:16:08

标签: javascript angularjs regex

我有以下代码

 <span id="{{policy.pname}}_query" class="policy-tag">{{policy.policy_groups[0].query}}</span> 

的输出
 policy.policy_groups[0].query

tags:(taga || tagb || tagc)

我希望正则表达式删除第一个字符&#39;(&#39;,最后一个&#39;)&#39;并替换&#39; ||&#39;与&#39;,&#39;

所以最终输出为tags:taga,tagb,tagc

尝试过但没有运气。我可以从控制器执行此操作,但不能在html中执行此操作。 非常感谢任何帮助。

-kim

3 个答案:

答案 0 :(得分:0)

基本上就是这样:

console.log(
  'tags:(taga || tagb || tagc)'.replace(/\(|\)/g, "").replace(/\s*\|\|\s*/g, ",")
)

说明:

.replace(
  / <-- open regex
  \( <-- find literal opening parenthesis
  | <-- or
  \) <-- find literal closing parenthesis
  /g <-- in the whole string
  ,  <-- "replace" method delimiter
  "" <-- replace with empty string
)
.replace( 
  / <-- open regex again
  \s* <-- find zero or more spaces
  \| <-- find a pipe
  \| <-- find another pipe
  \s* <-- find zero or more spaces after that
  /g <-- in the whole string
  , <-- "replace" method delimiter
  "," <-- replace with commas
)

这个正则表达式假定你的标签中没有括号,如果不是这样,请告诉我,我会更新它以解决这个问题。

我希望有所帮助!

答案 1 :(得分:0)

假设您可以使用替换过滤器(https://www.npmjs.com/package/angularjs-filters

&#13;
&#13;
<span id="{{policy.pname}}_query" class="policy-tag">{{policy.policy_groups[0].query | string.replace:"/([\(\)]| *\|{2} *)/": "," }}</span> 
&#13;
&#13;
&#13;

答案 2 :(得分:0)

如果没有正则表达式,您也可以这样做。更详细,但更容易阅读和维护。

var string = policy.policy_groups[0].query;
var first = string.indexOf('(');
var last = string.indexOf(')');
string = string.substring(0, first) + string.substring(first + 1, last) + string.substring(last + 1);
string.split(' || ').join(',');