如何在正则表达式中有效使用或条件

时间:2015-01-14 06:02:13

标签: javascript php jquery regex

在正则表达式中我是新手,我正在使用掌握正则表达式书。我遇到了一个问题,无法区分书中^和$的用法。他们说用于匹配所有行中的特定字符串而不是单个文本中的特定字符串。 我在下面有一段代码,在一个正则表达式中,即regx1我没有使用^和$而在其他我使用的regx2中。但结果我得到的不同。这段代码是

$(document).ready(function(){
  var regx1 = /yes|no/;
  var regx2 = /^yes|no$/;

  var str = 'we are the beauty of yes';
  var str1 = 'we are yes the beauty';

  //Test the regular condition...
  if (regx1.test(str)) {
    console.log(true);
  } else {
    console.log(false);
  }

  if (regx2.test(str1)) {
    console.log(true);
  } else {
    console.log(false);
  }

});

在第一个if条件中我得到结果,而在第二个条件我得到假,虽然在第二个正则表达式中我找到相同的词,即是或否。所以请让我知道两者有什么区别

2 个答案:

答案 0 :(得分:1)

第二个测试返回false,因为^断言“yes”位于字符串开头的位置,而$断言“no”位于字符串结尾的位置;两个单词都不在你给定字符串中的任何一个位置。

要使此测试返回true,需要在字符串中的其中一个位置声明其中一个单词。

/^yes|no$/.test('we are yes the beauty');  // false
/^yes|no$/.test('yes we are the beauty');  // true
/^yes|no$/.test('we are the beauty, no');  // true

通常,^$是不使用任何字符但仅在这些位置断言的锚点。

答案 1 :(得分:0)

/yes|no/

以上将在任何地方匹配是或否。它甚至会匹配"yesterday""none"等字符串。

/^yes|no$/

以上内容将匹配字符串开头yes和字符串 end no。那不是想要的。相反,它将是^(yes|no)$。同时使用/\b(yes|no)\b/中的字边界,以便与yesno中的"none""yesterday"不匹配。