正则表达式在 Angular 模板中无法按预期工作

标签 regex angular2-template angular8

我正在尝试使用正则表达式从字符串中提取特定句子。

输入字符串:

  1. 酒店位置 阿尔布拉克酒店位于迪拜德伊勒,距离黄金市场和香料市场仅数步之遥。此酒店距离迪拜购物中心 8.6 英里(13.9 公里),距离中心 9 英里(14.5 公里)。

  2. 阿联酋购物中心和迪拜滑雪场步道。此酒店距离瑞斯 9.1 英里(14.6 公里)。

预期输出字符串:

  1. 此酒店距离迪拜购物中心 13.9 公里(8.6 英里)
  2. 此酒店距离雷斯 14​​.6 公里(9.1 英里)。

实际输出字符串:

  1. 此酒店距离13.9 公里(8.6 英里)
  2. 此酒店距离 14.6 公里(9.1 英里)

下面是我的代码

组件.ts

regex = /This(.*)hotel(.*)from(.*?)((.)|(?=and))/;
// regex = new RegExp('This(.*)hotel(.*)from(.*?)((.)|(?=and))') 

template.html

<div>
    {{hotel.HotelInfo.HotelDescription.match(regex)?hotel.HotelInfo.HotelDescription.match(regex)[0]:null}}
</div>

我已经使用 this website 测试了这个正则表达式而且效果很好。

最佳答案

模式的这部分from(.*?)((.)|(?=and))匹配from,然后尽可能匹配任何字符.*? 后跟使用点 (.)| 匹配任何字符,断言右侧的内容是 使用正向前瞻 (?=and)

在这两种情况下,from 右侧都有一个字符,因此将进行匹配。

您可以使匹配更加具体:

\bThis hotel is \d+(?:\.\d+)? mi \(\d+(?:\.\d+)? km\) from .*?(?= and|$)

部分模式

  • \b这家酒店是 按字面意思匹配
  • \d+(?:\.\d+)? 匹配 1+ 位数字和可选的小数部分
  • mi 按字面匹配
  • \( 匹配 (
  • \d+(?:\.\d+)?
  • km) from 按字面匹配
  • .*? 匹配除换行符以外的任何字符,非贪婪
  • (?= and|$) 正向前瞻,断言右侧是 and 或字符串结尾

Regex demo

关于正则表达式在 Angular 模板中无法按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58922397/

相关文章:

java - 如何获取长字符串并创建以特定字符序列开头和结尾的较小字符串

javascript - 评论超出范围的正则表达式

angular - 如何在模板形式 Angular 2 中使用最小、最大验证

angular - 几分钟后在 Angular 2 中自动注销

javascript - 如何使用 jQuery 或 javascript 修改 URL 结尾?

regex - Powershell 正则表达式用连字符替换下划线

javascript - 根据下拉选项显示 div

angular - 将输入和输出从 HTML 移至 Angular 中的 Typescript

angular7 - 如何重置 primeng 日期选择器日历

node.js - Angular-Nodejs SSL