Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带角度长文本的RegExp函数_Regex_Angular - Fatal编程技术网

带角度长文本的RegExp函数

带角度长文本的RegExp函数,regex,angular,Regex,Angular,我有一本有脚注的书要展示。 我把脚注放在花括号里 为了检索注释并在不同的窗口中显示它们,我在Angular 2中编写了以下类: export class BookreaderComponent implements OnInit { comments() { var regexp = new RegExp('\{(\s*?.*?)*?\}'); var array= regexp.exec(this.book); console.log(array); } c

我有一本有脚注的书要展示。 我把脚注放在花括号里

为了检索注释并在不同的窗口中显示它们,我在Angular 2中编写了以下类:

export class BookreaderComponent implements OnInit {

comments() {
    var regexp = new RegExp('\{(\s*?.*?)*?\}');
    var array= regexp.exec(this.book);
    console.log(array);
  }

  constructor(public appServices: AppServices, private http: Http, private route: ActivatedRoute) { }
  book: string;
  Name: string;
  json: string;
  ngOnInit() {
    this.route.params.subscribe(params => {
      this.Name = params['name'];
      this.http.get("./assets/" + params['url'])
        .map(ref => {
          return ref;
        }).subscribe(ref => {
          this.book = ref.text();
          this.comments();
        });
    });

  }
该类调用
comments
函数,该函数对大量文本调用正则表达式函数,其中包含大量带花括号的文本。问题是regex函数需要很长时间才能加载(我等了又等,它没有加载),同时整个页面都被卡住了

有没有办法加快速度,或者把它分成小块?或者我应该尝试另一种方式来显示这些脚注?

我设置了一个测试,该测试忽略了http.get。正则表达式的速度看起来很好,没有图片中的可见值

我查看了从右到左的方面,但看不出它如何影响正则表达式。在任何情况下,我都保持正则表达式的原样,使用
,因为我注意到有人发布RTL需要惰性计算

而且,大多数RTL语言讨论似乎都集中在CSS标记上,所以我想知道RTL是否会产生任何影响。毕竟,它还是一根弦?你能不能提供一个RTL的简短例子,这样我可以澄清我的想法

注意

var array=regexp.exec(this.book)仅返回第一个匹配项。要使用此语法,需要循环,直到不再匹配为止。因此,我使用了
this.book.match(re)
,它更快

const getMockBook=()=>{
const line='这里是一些包含{comment}的文本';
常量行数=2000;
constbook=(新数组(行计数)).join(行);
还书;
}
常量注释1=(书籍)=>{
const start=新日期();
const regexp=new regexp('\{(\s*?*?*)*?\}',g');
常量数组=regexp.exec(book);
返回`appeased:${(new Date())-start},大小:${book.length},匹配项:${array.length}`
}
常量注释2=(书籍)=>{
const start=新日期();
常数re=/{(\s*?*?*)*?}/g
常量数组=book.match(re);
返回`appeased:${(new Date())-start},大小:${book.length},匹配项:${array.length}`
}
constbook=getMockBook();
控制台日志(注释1(书籍));

console.log(comments2(book))从前面的评论中,“看起来好像是因为它是从右到左的,而且它和大括号混在一起了”-我不熟悉从右到左的文本,但会检查它。它成功了!!!可能是因为我没有使用match,所以它只返回一个或两个值。哇,非常感谢!!没问题。“重复问题”到此为止。这真是一个诅咒。是的:)。感谢您查看它。现在应该添加回regex标记:)。