使用正则表达式匹配器从字符串中提取高速公路
Extracting highways from a string using regular expression matcher
我正在使用正则表达式匹配器从文本中提取部分字符串。
例如这是正文:
var str = "I-35 South / US-290 West"
我想提取两个字符串,
- I-35 南
- US-290 西。
我尝试了下面的模式,它在测试方法上返回 true。但是没有返回预期的匹配项。
var pattern = /^(I|US|TX)-\d{1,3}.*$/
str.match(pattern)
Returns
- “I-35 南/US-290 西”
- “我”
如果我删除“.*”匹配就不会发生。
感谢任何帮助。
使用matches
我们可以尝试:
var str = "I-35 South / US-290 West";
var highways = str.match(/[A-Z]+-\d+ \w+/g);
console.log(highways);
请注意,如果您的输入始终是一个以斜线分隔的高速公路列表,那么您也可以按该分隔符拆分:
var str = "I-35 South / US-290 West";
var highways = str.split(/\s*\/\s*/);
console.log(highways);
因为你想在同一个字符串中进行多次匹配,你可以省略锚点 ^
和 $
,也可以省略 .*
,后者将匹配到字符串的末尾。
如果只得到匹配,你也可以把捕获组变成非捕获组。
注意在正则表达式后添加 /g
标志以获取所有匹配项。
\b(?:I|US|TX)-\d{1,3} \w+
说明
\b
一个单词边界
(?:I|US|TX)
匹配任何选项
-\d{1,3}
匹配-
和1-3位数字
\w+
匹配一个space和1+个单词字符
var str = "I-35 South / US-290 West"
var pattern = /\b(?:I|US|TX)-\d{1,3} \w+/g;
console.log(str.match(pattern));
我正在使用正则表达式匹配器从文本中提取部分字符串。
例如这是正文:
var str = "I-35 South / US-290 West"
我想提取两个字符串,
- I-35 南
- US-290 西。
我尝试了下面的模式,它在测试方法上返回 true。但是没有返回预期的匹配项。
var pattern = /^(I|US|TX)-\d{1,3}.*$/
str.match(pattern)
Returns
- “I-35 南/US-290 西”
- “我”
如果我删除“.*”匹配就不会发生。
感谢任何帮助。
使用matches
我们可以尝试:
var str = "I-35 South / US-290 West";
var highways = str.match(/[A-Z]+-\d+ \w+/g);
console.log(highways);
请注意,如果您的输入始终是一个以斜线分隔的高速公路列表,那么您也可以按该分隔符拆分:
var str = "I-35 South / US-290 West";
var highways = str.split(/\s*\/\s*/);
console.log(highways);
因为你想在同一个字符串中进行多次匹配,你可以省略锚点 ^
和 $
,也可以省略 .*
,后者将匹配到字符串的末尾。
如果只得到匹配,你也可以把捕获组变成非捕获组。
注意在正则表达式后添加 /g
标志以获取所有匹配项。
\b(?:I|US|TX)-\d{1,3} \w+
说明
\b
一个单词边界(?:I|US|TX)
匹配任何选项-\d{1,3}
匹配-
和1-3位数字\w+
匹配一个space和1+个单词字符
var str = "I-35 South / US-290 West"
var pattern = /\b(?:I|US|TX)-\d{1,3} \w+/g;
console.log(str.match(pattern));