如何使用正则表达式使用JavaScript排除单词?

时间:2016-05-12 01:27:39

标签: javascript regex

我是新手使用正则表达式,我想知道是否可以排除一个单词。我有以下数据列表:

cat.text"
cat.doc"
dog.txt"
dog.text"
frog.txt"
dog.text"
dog.  text"
cat. text"
cat. text "

根据这些数据,我只想获得.text"(或. text ".text "等)部分,但我不想包含{{1}来自任何包含.text"的项目。到目前为止,我可以获取所有cat,但不知道如何排除.text"字的那些。我到目前为止cat并且它得到了

\.\s*text\s*"

有任何帮助吗?谢谢!

2 个答案:

答案 0 :(得分:3)

  

我能够获得所有.text"但不确定如何排除" cat"字。

您可以使用以下正则表达式:

/^(?!cat).*\.\s*text/m

如果您希望匹配不考虑字母大小写,可以在末尾添加不区分大小写的i标记(例如mi)。

说明:

^       // assert position at start of a line (with the multiline 'm' flag)
(?!cat) // negative lookahead to prevent matching if line starts with cat
.*      // match any number of characters excluding linebreak characters
\.      // match "." literally
\s*     // match any number of whitespace characters
text    // match "text" literally
        // flags: 
        // "m" - multiline, matches on a per line basis)

<强> Regex101

编辑:如果您想将后缀标记与结束引号相匹配,可以使用以下命令:

/^(?!cat).*(\.\s*text\s*\")/m

<强> Regex101

注意Regex101右侧的匹配信息。假设正确使用字符串/正则表达式方法,()捕获匹配输出。

如何使用String.prototype.match提取捕获的组的示例:

&#13;
&#13;
var strArr = [ 'cat.text"',
'cat.doc"',
'dog.txt"',
'dog.text"',
'frog.txt"',
'dog.text"',
'dog.  text"',
'cat. text"',
'cat. text "',
'dogtext',
'textexttext'];

var re = /^(?!cat).*(\.\s*text\s*\")/mi;

var testDiv = document.querySelector('.testString');
var resultDiv = document.querySelector('.resultString');

strArr.forEach(function(str) {
  testDiv.insertAdjacentHTML('beforeend', str + '<br>');
  if (str.match(re))
    resultDiv.insertAdjacentHTML('beforeend', str.match(re)[1] + '<br>');
  else resultDiv.insertAdjacentHTML('beforeend', '<br>');
});
&#13;
.testString {
  display: inline-block;
}

.resultString {
  display: inline-block;
  position: relative;
  left: 10%;
}
&#13;
<div class='testString'></div>
<div class='resultString'></div>
&#13;
&#13;
&#13;

我在使用g时删除了string.prototype.match标记,因为您想要捕获的组。使用g标志返回整个匹配字符串。

答案 1 :(得分:0)

你可以做这样的事......

  1. 将字符串分成两部分
  2. 使用其中一个部分来检查您是否排除(或包含)
  3. 返回其他部分(如果需要,则返回两者)