javascript - 如何在正则表达式中提取由单词后跟分号分隔的句子?
问题描述
我正在尝试编写一些正则表达式模式以从文本块中取出位置、功能和付款接受部分。我正在制作一个显示食物选项的网站,在 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
解决方案
您可以使用此正则表达式来提取这三个文本部分,
/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]);
推荐阅读
- python - 为什么我在使用 np.degrees(np.math.atan2(np.linalg.det([A,B]),np.dot(A,B))) 时得到负角作为输出?
- spring-boot - 未定义 SignatureAlgorithm.HS256,spring boot 中的 jwt 授权
- arrays - 如何组合 2 个数组以快速创建数组数组
- r - 反向地理编码纬度/经度坐标以检索土地利用数据(例如住宅区、高速公路等)
- javascript - 替换html后重新加载flickity
- python - 方括号本身代表什么?
- c++ - boost::asio UDP 服务器,如何发送而无需先进行 receive_from?
- extjs - 无法检索网格中的选定记录
- ruby-on-rails - 如何获取要保存的 ActiveRecord 非持久变量?
- javascript - 在 javascript 中读取 JSON 文件时数组不工作