我有一本带有脚注的书,我想显示。我将脚注放在卷曲括号内的位置。
为了检索评论并在其他窗口中显示它们,我在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));