REGEXP功能具有长文本的角度



我有一本带有脚注的书,我想显示。我将脚注放在卷曲括号内的位置。

为了检索评论并在其他窗口中显示它们,我在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的Angular Plunker。正则速度看起来不错,没有图片中可观察到的。

我看了左右的方面,但看不到它如何影响正则。在任何情况下,我都将正则表达式如?离开,因为我注意到有人发布了RTL需要懒惰评估。

此外,大多数RTL语言讨论似乎都集中在CSS标签上,因此我想知道是否由于RTL会产生任何影响。毕竟,它仍然是字符串吗?您能提供一个简短的RTL示例,以便我可以澄清我的想法。

注意

var array= regexp.exec(this.book);仅返回第一匹匹配。要使用此语法,您需要循环直到不再匹配。因此,我使用的是更快的this.book.match(re)

const getMockBook = () => {
  const line = 'Here is some text with a {comment} in it';
  const lineCount = 2000;
  const book = (new Array(lineCount)).join(line);
  return book;
}
const comments1 = (book) => {
  const start = new Date();
  const regexp = new RegExp('{(s*?.*?)*?}', 'g');
  const array= regexp.exec(book);
  return `elapsed: ${(new Date()) - start}, size: ${book.length}, matches: ${array.length}`
}
const comments2 = (book) => {
  const start = new Date();
  const re = /{(s*?.*?)*?}/g
  const array= book.match(re);
  return `elapsed: ${(new Date()) - start}, size: ${book.length}, matches: ${array.length}`
}
const book = getMockBook();
console.log(comments1(book));
console.log(comments2(book));

最新更新