Javascript - 使用匹配查找两个词和 return 它们之间的所有文本(尽管有换行符)
Javascript - using match to find two words and return all text between them (in spite of line breaks)
在编程方面,我是一个纯粹的业余爱好者,尤其是 javascript,但我正在努力解决一个问题,但我没有运气通过广泛的 Google搜索。
我正在编写一个简短的脚本来获取从始终具有一致 format/layout 但不同结果的网站复制的一段文本,并将其粘贴到大文本字段中。然后你点击一个按钮,它会从文本中提取某些信息,并以重新格式化的方式呈现这些信息。
我想用它来完成我想做的大部分工作,但文本的一部分包含多个换行符,因此我的匹配项无法正常工作。当这场比赛失败时,它也会打破其余比赛。具体来说,我试图从下面的文字 "Restaurant:" 和 "Cuisine:" 之间提取餐厅名称、地址、城市和邮编以及 phone 号码:
宾客姓名:John Doe Phone:(555) 555-5555 预订日期:2015 年 3 月 14 日,星期六 时间:6:00 下午 派对人数:2 确认号码:1703515901 餐厅:Café Boulud
20 东 76 街
纽约州纽约市 10021
(212) 772-2600
菜式:法式、美式 餐厅信息:感谢您预订 Cafe Boulud。对于国际客人:请在上面的 space 中留下您的电子邮件地址和完整的 phone 电话号码。此信息将用于确认您与我们的预订。我们的菜单提供范围广泛的点菜选项,其灵感来自主厨 Daniel Boulud 的四大烹饪灵感:传统、经典的法国美食; la saison,时令美食; le potager,菜园;和 le voyage,世界美食的风味。
这是我写的。它适用于所有预订详情,但不适用于餐厅详情:
<HTML>
<HEAD>
<script>
function getVal(){
var val = document.getElementById('ta').value;
reserved = val.match("Name: (.*) Phone:");
date = val.match("Date: (.*) Time:");
time = val.match("Time: (.*) Party");
party = val.match("Size: (.*) Confirmation");
confirmation = val.match("#: (.*) Restaurant:");
restaurant = val.match("Restaurant: (.*) Cuisine:");
}
function myFunction() {
var myWindow = window.open("", "myWindow", "width=400, height=400");
myWindow.document.write(restaurant[1]+"</p>"+"Reserved Under: "+reserved[1]+"</br>Date: "+
date[1]+" at "+time[1]+"</br>Party Size: "+party[1]+"</br>Confirmation #: "+confirmation[1]
);
}
</script>
</HEAD>
<BODY>
</p>
<form>
<textarea rows="30" cols="100" id="ta"></textarea></br>
<button onclick="getVal(); myFunction();">Get Value</button>
</form>
</BODY>
</HTML>
如果你想匹配每一个字符,你必须做类似 [\s\S]*
而不是 .*
的事情。
在你的情况下,你的正则表达式应该是 "Restaurant: (\s\S*)Cuisine:"
如果我没记错的话,"Cuisine"前面没有space,因为有换行。
演示:
Restaurant: ([\s\S]*)Cuisine:
HTML 实例:
function getVal(){
var val = document.getElementById('ta').value;
reserved = val.match("Name: (.*) Phone:");
date = val.match("Date: (.*) Time:");
time = val.match("Time: (.*) Party");
party = val.match("Size: (.*) Confirmation");
confirmation = val.match("#: (.*) Restaurant:");
restaurant = val.match(/Restaurant: ([\s\S]*)Cuisine:/);
}
getVal();
document.getElementById('result').innerHTML = "Restaurant : " +restaurant[1]+"\n"+"Reserved Under: "+reserved[1]+"\nDate: "+
date[1]+" at "+time[1]+"\nParty Size: "+party[1]+"\nConfirmation #: "+confirmation[1];
#ta, #result
{
width:100%;
height:200px;
}
<h2>Text to parse :</h2>
<textarea id="ta">
Guest Name: John Doe Phone: (555) 555-5555 Reservation Date: Saturday, March 14, 2015 Time: 6:00 PM Party Size: 2 Confirmation #: 1703515901 Restaurant: Café Boulud
20 East 76th St.
New York, NY 10021
(212) 772-2600
Cuisine: French, American Message from the Restaurant: Thank you for making reservations at Cafe Boulud. FOR INTERNATIONAL GUESTS: Please leave your email address and full phone number in the space above. This information will be used to confirm your reservation with us. Our menu offers a wide range of a la carte options inspired by Chef Daniel Boulud's four culinary muses: la tradition, classic French cuisine; la saison, seasonal delicacies; le potager, the vegetable garden; and le voyage, the flavors of world cuisines.
</textarea>
<hr>
<h2>Result :</h2>
<textarea id="result">
</textarea>
在编程方面,我是一个纯粹的业余爱好者,尤其是 javascript,但我正在努力解决一个问题,但我没有运气通过广泛的 Google搜索。
我正在编写一个简短的脚本来获取从始终具有一致 format/layout 但不同结果的网站复制的一段文本,并将其粘贴到大文本字段中。然后你点击一个按钮,它会从文本中提取某些信息,并以重新格式化的方式呈现这些信息。
我想用它来完成我想做的大部分工作,但文本的一部分包含多个换行符,因此我的匹配项无法正常工作。当这场比赛失败时,它也会打破其余比赛。具体来说,我试图从下面的文字 "Restaurant:" 和 "Cuisine:" 之间提取餐厅名称、地址、城市和邮编以及 phone 号码:
宾客姓名:John Doe Phone:(555) 555-5555 预订日期:2015 年 3 月 14 日,星期六 时间:6:00 下午 派对人数:2 确认号码:1703515901 餐厅:Café Boulud 20 东 76 街 纽约州纽约市 10021 (212) 772-2600 菜式:法式、美式 餐厅信息:感谢您预订 Cafe Boulud。对于国际客人:请在上面的 space 中留下您的电子邮件地址和完整的 phone 电话号码。此信息将用于确认您与我们的预订。我们的菜单提供范围广泛的点菜选项,其灵感来自主厨 Daniel Boulud 的四大烹饪灵感:传统、经典的法国美食; la saison,时令美食; le potager,菜园;和 le voyage,世界美食的风味。
这是我写的。它适用于所有预订详情,但不适用于餐厅详情:
<HTML>
<HEAD>
<script>
function getVal(){
var val = document.getElementById('ta').value;
reserved = val.match("Name: (.*) Phone:");
date = val.match("Date: (.*) Time:");
time = val.match("Time: (.*) Party");
party = val.match("Size: (.*) Confirmation");
confirmation = val.match("#: (.*) Restaurant:");
restaurant = val.match("Restaurant: (.*) Cuisine:");
}
function myFunction() {
var myWindow = window.open("", "myWindow", "width=400, height=400");
myWindow.document.write(restaurant[1]+"</p>"+"Reserved Under: "+reserved[1]+"</br>Date: "+
date[1]+" at "+time[1]+"</br>Party Size: "+party[1]+"</br>Confirmation #: "+confirmation[1]
);
}
</script>
</HEAD>
<BODY>
</p>
<form>
<textarea rows="30" cols="100" id="ta"></textarea></br>
<button onclick="getVal(); myFunction();">Get Value</button>
</form>
</BODY>
</HTML>
如果你想匹配每一个字符,你必须做类似 [\s\S]*
而不是 .*
的事情。
在你的情况下,你的正则表达式应该是 "Restaurant: (\s\S*)Cuisine:"
如果我没记错的话,"Cuisine"前面没有space,因为有换行。
演示:
Restaurant: ([\s\S]*)Cuisine:
HTML 实例:
function getVal(){
var val = document.getElementById('ta').value;
reserved = val.match("Name: (.*) Phone:");
date = val.match("Date: (.*) Time:");
time = val.match("Time: (.*) Party");
party = val.match("Size: (.*) Confirmation");
confirmation = val.match("#: (.*) Restaurant:");
restaurant = val.match(/Restaurant: ([\s\S]*)Cuisine:/);
}
getVal();
document.getElementById('result').innerHTML = "Restaurant : " +restaurant[1]+"\n"+"Reserved Under: "+reserved[1]+"\nDate: "+
date[1]+" at "+time[1]+"\nParty Size: "+party[1]+"\nConfirmation #: "+confirmation[1];
#ta, #result
{
width:100%;
height:200px;
}
<h2>Text to parse :</h2>
<textarea id="ta">
Guest Name: John Doe Phone: (555) 555-5555 Reservation Date: Saturday, March 14, 2015 Time: 6:00 PM Party Size: 2 Confirmation #: 1703515901 Restaurant: Café Boulud
20 East 76th St.
New York, NY 10021
(212) 772-2600
Cuisine: French, American Message from the Restaurant: Thank you for making reservations at Cafe Boulud. FOR INTERNATIONAL GUESTS: Please leave your email address and full phone number in the space above. This information will be used to confirm your reservation with us. Our menu offers a wide range of a la carte options inspired by Chef Daniel Boulud's four culinary muses: la tradition, classic French cuisine; la saison, seasonal delicacies; le potager, the vegetable garden; and le voyage, the flavors of world cuisines.
</textarea>
<hr>
<h2>Result :</h2>
<textarea id="result">
</textarea>