如果一个术语不包括连字符,我正试图找到合适的正则表达式来选择它。例如,我想查找术语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-])