我是新手使用正则表达式,我想知道是否可以排除一个单词。我有以下数据列表:
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*"
有任何帮助吗?谢谢!
答案 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
提取捕获的组的示例:
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;
我在使用g
时删除了string.prototype.match
标记,因为您想要捕获的组。使用g
标志返回整个匹配字符串。
答案 1 :(得分:0)
你可以做这样的事......