首页 > 解决方案 > 如何在正则表达式中提取由单词后跟分号分隔的句子?

问题描述

我正在尝试编写一些正则表达式模式以从文本块中取出位置、功能和付款接受部分。我正在制作一个显示食物选项的网站,在 API 中,它们有一个描述部分,其中包含足够多的信息,这就是我要提取特定文本的原因。

我在正则表达式中查看了正面和负面的前瞻性,但我仍然无法解决我的问题。我可以选择直到第二部分的所有内容,但前提是在这种情况下我选择了位置。如果我选择功能,我也会选择上一部分,位置。请参阅下面的文本作为示例。

这是我要从中提取的文本:

位置:Village 1 \r\n\r\n特色:提供多种产品,包括主菜、热餐、燃木比萨、沙拉吧、烧烤食品、定制熟食三明治和卷饼、便利食品等等\r\n\r\n接受的付款方式:现金、Watcard \r\n\r\n这是结识朋友的好地方!来自我们内部 UW Bakery 的新鲜出炉的面包和糕点的香气一定会让您深吸一口气。Mudie's 提供多种素食、外带食品、沙拉吧、烧烤食品、定制熟食三明治和皮塔饼、全套早餐和方便食品。每个午餐和晚餐时间都提供热菜和配菜。\r\n\r\n妈妈柜台的用餐时间*:\r\n\r\n早餐:7:30 - 11:00 am\r\n \r\n午餐:11:30 am - 2:00 pm\r\n\r\n晚餐:4:30 - 8:00 pm \r\n\r\n*请注意,

到目前为止我写了这个:

  /.+?(?=Payment accepted)/

选择所有内容,直到已接受付款部分。我也写了

/(Location|Features|Payment accepted):\s{1,4}?[A-Z]+\s?\d?/

它选择了我三个想要的地方的部分。我无法将两者联系起来,或者想出任何能够在不包括其他部分的情况下选择我需要的东西。任何帮助,将不胜感激。

因此,在上述情况下,我提取的部分将是:

Location: Village 1
Features:  A multitude of offerings, including entrees, hot meals, wood-fired pizza, salad bar, grill items, made-to-order deli sandwiches & wraps, convenience items and much more
Payment accepted: cash, Watcard

标签: javascriptregex

解决方案


您可以使用此正则表达式来提取这三个文本部分,

/Location:\s*([^\v]*)\s*Features:\s*([^\v]*)Payment accepted:(.*?)(?=\r\n)/

这是相同的JS代码。

    var myString = "Location: Village 1 \r\n\r\nFeatures:  A multitude of offerings, including entrees, hot meals, wood-fired pizza, salad bar, grill items, made-to-order deli sandwiches & wraps, convenience items and much more\r\n\r\nPayment accepted: cash, Watcard  \r\n\r\nThis is a great place to meet your friends! The aroma of fresh baked breads and pastries from our in-house UW Bakery will surely make you take a deep breath. Mudie’s offers a large selection of vegetarian foods, grab n’ go items, salad bar, grill items, made-to-order deli sandwiches and pitas, full breakfast, and convenience foods. A hot entrée item and side dishes are available every lunch and dinner hour.\r\n\r\nMeal hours for Mom's Counter*:\r\n\r\nBreakfast: 7:30 - 11:00 am\r\n\r\nLunch:11:30 am - 2:00 pm\r\n\r\nDinner: 4:30 - 8:00 pm \r\n\r\n*please note, these hours are subject to change without notice "; // I want "abc"

    var arr = /Location:\s*([^\v]*)\s*Features:\s*([^\v]*)Payment accepted:([^\r\n]*)/.exec(myString);

    console.log("Location --> "+arr[1]);
    console.log("Features --> "+arr[2]);
    console.log("Payment accepted --> "+arr[3]);


推荐阅读