如何提取正则表达式中由单词和分号分隔的句子?

时间:2018-12-22 15:23:45

标签: javascript regex

我正在尝试编写一些正则表达式模式,以从文本块中取出位置,功能部件和接受付款的部分。我正在建立一个显示食物选择的网站,并且在API中,它们的描述部分包含了足够的信息,这就是为什么我要提取特定文本的原因。

我在正则表达式中进行了正面和负面的展望,但仍然无法解决问题。我可以选择第二部分之前的所有内容,但前提是在这种情况下我要选择位置。如果要选择功能,则还要选择上一部分位置。参见以下文字作为示例。

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

  

位置:村庄1 \ r \ n \ r \ n功能:众多   产品,包括主菜,热餐,燃木比萨饼,沙拉吧,   烧烤物品,定制熟食三明治和包裹,方便   物品及更多\ r \ n \ r \ n已接受付款:现金,Watcard   \ r \ n \ r \ n这是结识朋友的好地方!的香气   我们内部的UW Bakery提供的新鲜烤制面包和糕点将   肯定会让您深吸一口气。 Mudie提供了很多   选择素食,抢购食物,沙拉吧,   烧烤用品,熟食三明治和pitas,全套早餐,   和方便食品。提供热食和小菜   每个午餐和晚餐时间。\ 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

2 个答案:

答案 0 :(得分:2)

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

/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]);

答案 1 :(得分:0)

如果我正确理解了这一点,并且您确定各节的重复顺序相同,那么您可以将各行的正则表达式放在一起。

Is something like this what you were looking for?

Location:\s?([\w\d ]+)\s{1,5}Features:\s+(.+)\s{1,5}Payment accepted:\s?(.+)