【问题标题】:Making a Pipe with Regex on Angular2在 Angular2 上使用正则表达式制作管道
【发布时间】:2017-03-09 10:45:13
【问题描述】:

我已经在这里问过类似的问题:stackoverflow.com/questions/42674096/how-to-make-a-pipe-with-regex-in-angular2/

现在,我确实从给定的答案中尝试了以下方法:

import {Pipe, PipeTransform} from '@angular/core';

@Pipe({name:'regMatch'})
export class RegMatch implements PipeTransform {
    transform(value: string, arg?: any): any {
        let targetMatched = $('div.poll').text();
       // console.log(targetMatched );
        let reg = new RegExp(/\((.+?)\)/);
        let result: any;
        do {
            let matched:any = result;
            console.log(matched);
        }
        while((result = reg.exec(target)) !== null)
    }
}

发生的情况是,当我输入这个管道| regMatch 时,循环会导致浏览器崩溃。

我该如何解决这个问题?我怎样才能匹配(a) (b) (c) 或类似的,然后让我们说BOLD $('div.poll').text();

【问题讨论】:

  • let reg = /\((.+?)\)/;
  • let matched:any = res; = result;?除此之外,我没有看到任何res,因此 res 是undefined。我也没有看到任何target,而是targetMatched
  • let reg = /\(([^)]+)\)/g; - 使用 /g 匹配多个匹配项并使 RegExp 推进其索引。
  • 伙计们,错误仅在循环中。它使浏览器崩溃..
  • 而且你不需要进行while循环..let matched:any = str.match(/[^()]*(?=\))/g),希望所有的括号都正确闭合并且深度为1。

标签: javascript jquery html regex angular


【解决方案1】:

您正在使用不包含/g(全局修饰符)的正则表达式运行循环。这意味着,每次您的正则表达式找到匹配项时,lastIndex 属性都不会更改,并且在下一次迭代期间,将找到相同的匹配项,依此类推,从而导致无限循环。

String#exec documentation at MDN:

lastIndex     开始下一场比赛的索引。当 "g" 不存在时,它将保持为 0。

使用

let reg = /\([^)]+\)/g;

它将匹配所有次出现的(,然后匹配)以外的1+个字符,然后是)

【讨论】:

  • 正是我需要的!谢谢!
猜你喜欢
  • 2017-07-29
  • 1970-01-01
  • 2018-02-14
  • 2010-09-26
  • 2021-09-03
  • 2012-10-08
  • 1970-01-01
相关资源
最近更新 更多