在Angular2上制作带正则表达式的管道

时间:2017-03-09 10:45:13

标签: javascript jquery html regex angular

我已经在这里问了类似的问题: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();

1 个答案:

答案 0 :(得分:1)

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

请参阅String#exec documentation at MDN

  

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

使用

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

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