RegEx检查AT字符

时间:2015-04-14 16:53:22

标签: javascript regex

我正在尝试检查单词是否在字符串中,现在我已经走了很远。 当单词test后面有或没有特殊字符时,下面的代码可以正常工作。 现在我想让它检查字符串前面的1个字符,这是字符@所以每当字符串@test时它必须匹配。

//THIS RETURNS FALSE WHICH IS NOT GOOD
var str = "Mr. @test has a blue house";
var match = "@test";
var b = new RegExp('\\b' + match + '(?:es|s)?\\b');
var n = b.test(str);
    console.log('test 1 ' + n);


//THIS RETURNS BACK TRUE WHICH IS GOOD
var str = "Mr. test! has a blue house";
var match = "test";
var b = new RegExp('\\b' + match + '(?:es|s)?\\b');
var n = b.test(str);
    console.log('test 2 ' + n);

2 个答案:

答案 0 :(得分:1)

\b用于单词边界,但@不是单词字符。所以你想要这样做:

\B@test(?:es|s)?\b

这意味着在 @ 之前没有任何单词结束。 (DEMO

答案 1 :(得分:0)

因此,\b\B有点棘手。要理解它们,您需要了解以下概念:

  • \w匹配单个"字符",表示任何基本ASCII字母azA到{{1} },或任何基本ASCII数字Z0,或下划线9
  • _匹配单个"非单词字符",表示任何不是单词字符的字符。
  • \W匹配"字边界",表示字符串中与一个单词字符相邻的点。例如,在\b中,"yes."之前有一个单词边界,y后面有一个单词边界。
  • s匹配"非字边界",表示字符串中字边界的点。例如,在\B中,"yes."y之间以及ee之间存在非字边界。

幸运或其他方式,听起来 匹配你想要的东西;您认为s是"字",但就@test\w以及\W\b而言,这个词有\B

因此,您需要首先正式确定" word"的概念,然后才能实现这一概念。