如果不包含连字符,我正在尝试找到正确的正则表达式来选择一个术语。例如,我想找到术语debt
但不是debt-to-income
。
我有\bdebt-to-income\b
只会选择debt-to-income
,但我需要相反。救命啊!
答案 0 :(得分:2)
只需使用JavaScript:
var hyphens = 'debt-to-income';
if (hyphens.indexOf('-') == -1) {
// No hyphens
}
答案 1 :(得分:1)
使用以下模式:“债务”未跟随“ - 收入”
\bdebt(?!-to-income)
可以轻松扩展此模式以限制更多,例如“debt-of-the-usa
”:
\bdebt(?!-to-income|-of-the-usa)
你不应该只是寻找一个连字符,因为debt-free
(当debt-free
没有意义时)也应该匹配。
答案 2 :(得分:1)
debt\b([^\-]|$)
debt
后跟一个连字符或字符串结尾以外的字符。
如果您还要检查左侧:(^|[^\-])\bdebt\b([^\-]|$)
答案 3 :(得分:1)
基本上,你正在寻找“一个字母后跟非字母而不是连字符”:
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
答案 4 :(得分:0)
如果目的是在字符流中找到特定的单词,其中单词被定义为连续数字的字符,包括连字符,那么我认为\ b需要被放弃,因为它在Javascript中将连字符视为单词边界。例如,根据上述假设,债务或债务与收入之间的匹配将不正确。通过将单词字符定义为[\w\-]
,以下正则表达式将匹配正确的单词,但遗憾的是需要替换捕获组,因为第一部分与前面的字符匹配由于Javascript中缺乏外观支持。
(?:^|[^\w\-])(debt)(?=[^\w\-])