正则表达式选择术语,如果它不包含连字符

时间:2012-01-12 22:47:21

标签: javascript regex

如果不包含连字符,我正在尝试找到正确的正则表达式来选择一个术语。例如,我想找到术语debt但不是debt-to-income

我有\bdebt-to-income\b只会选择debt-to-income,但我需要相反。救命啊!

5 个答案:

答案 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\-])