仅在单词匹配时才匹配单词

时间:2017-10-06 04:13:53

标签: javascript regex

我花了一天时间尝试使用正则表达式来匹配单词唯一的单词。它没有用,我无法弄清楚我做错了什么。

我需要的东西只能匹配" ST"的唯一实例,例如:

  • " 1 MARY ST 华盛顿"

但是失败了:

  • " 1 ST MARY ST 华盛顿"
  • " 1 ST MARY ST MT ST HELENS"
  • " 1 MARY RD WE ST WASHINGTON"
  • " 1 MARY RD WASHINGTON"

我认为这个先行可行,但没有这样的运气:

(\bST\b)(?!(\bST\b))

我错过了什么?

2 个答案:

答案 0 :(得分:1)

您可以使用RegExp /\bST\b/g.match(),查看匹配字符串的.length



const matches = (str, re = /\bST\b/g, match = str.match(re)) => 
                  !!match && match.length === 1;

const arr = [
"1 MARY ST WASHINGTON"
, "1 ST MARY ST WASHINGTON"
, "1 ST MARY ST MT ST HELENS"
, "1 MARY RD WEST WASHINGTON"
, "1 MARY RD WASHINGTON"
];

console.log(arr.map(s => matches(s)));




答案 1 :(得分:1)

您可以使用以下模式:

^(?!(.*\bST\b){2,}).*\bST\b

这会立即产生负面预测,它会检查是否有2次或更多次\bST\b次出现。如果没有,则在模式中移动并检查是否至少有一个。