Regex以选择不包含连字符的术语



如果一个术语不包括连字符,我正试图找到合适的正则表达式来选择它。例如,我想查找术语debt,而不是debt-to-income

我有bdebt-to-incomeb,它将只选择debt-to-income,但我需要相反的。帮助

只需使用JavaScript:

var hyphens = 'debt-to-income';
if (hyphens.indexOf('-') == -1) {
  // No hyphens
}

使用以下模式:"债务"后面不跟"收益比"

bdebt(?!-to-income)

这种模式可以很容易地扩展以限制更多,例如"debt-of-the-usa":

bdebt(?!-to-income|-of-the-usa)

您不应该查找连字符,因为debt-free(当debt-free没有任何意义时)可能也应该匹配。

debtb([^-]|$)

后面跟一个字符而不是连字符或字符串末尾的debt

如果您也想检查左侧:(^|[^-])bdebtb([^-]|$)

基本上,您正在寻找"后面不是字母但不是连字符的术语":

term = "debt"
re = new RegExp("\b" + term + "(?=[^\w-])", "g")
text = "this is debt and debt, debtword and debt-to-income"
console.log(text.replace(re, "<$&>"))

结果:

this is <debt> and <debt>, debtword and debt-to-income

如果目的是在字符流中找到特定的单词,其中被定义为包括连字符在内的连续字符数,那么我认为需要放弃\b,因为它在Javascript中将连字符视为单词边界。例如,根据上述假设,债务或债务与收入的匹配不正确。通过将单词字符定义为[w-],以下正则表达式将与正确的匹配,但不幸的是,由于Javascript中缺乏后备支持,第一部分与前一个字符匹配,因此需要替换捕获组。

(?:^|[^w-])(debt)(?=[^w-])

最新更新