我有这个:
<textarea id="abc">
<img alt="the_alt_tag" src="the_source" />
</textarea>
我想删除alt标记。因为它只是textarea中的“文本”,并且因为我事先并不知道标签的内容,所以我在考虑搜索以
开头的单词alt="
以
结尾"
然后将其删除。 有没有办法在textarea中搜索开头和结尾的单词?
答案 0 :(得分:1)
您可以使用三个正则表达式:
var content = document.getElementById("abc").value;
content = content.replace(/\balt\s*=\s*"[^"]*" ?/gi, '')
.replace(/\balt\s*=\s*'[^']*' ?/gi, '')
.replace(/\balt\s*=\s*[^ '"=<>`]* ?/gi, '');
其中三个的原因是属性值可以是双引号或单引号,也可以不是引号。当不在引号中时,内容比引号中的内容更受限制,因此上面的字符类差异;详情in the spec。
所有三个都是相同的一般形式,让我们详细看第一个:
\b
- 表示“字边界”alt
- 单词alt
,字面意思\s*
- 零个或多个空格字符(\s
=空格字符,*
=前面的零个或多个字符数)=
- 等号,字面意思\s*
- 再次出现零个或多个空白字符"
- 双引号,字面意思[^"]
- “否定字符类”,表示“"
以外的任何字符”。通常,字符类是允许的字符列表,因此[abc]
表示可以有a
,b
或c
;但否定一个(以^
开头)意味着您列出了不允许的字符。所以在这种情况下,我们说的是“除"
之外的任何东西”。在第三个正则表达式中,我们通过说[^ '"=<>`]
来限制性更强 - 除了空格,撇号,双引号,等号,左或右尖括号或重音(反引号)之外的任何东西*
- 之前的零件或更多 - 所以,零个或多个字符与上面的否定字符类匹配"
- 文字"
?
- 最后的可选空格。所有三个正则表达式最后都有两个标志,g
表示“全局”(更改所有出现次数),i
表示“case Insensitive”(忽略字母大写)。 / p>
更多信息:https://regex101.com/r/oP0dO4/1
document.querySelector("input[type=button]").onclick = function() {
var content = document.getElementById("abc").value;
content = content.replace(/\balt\s*=\s*"[^"]*" ?/g, '')
.replace(/\balt\s*=\s*'[^']*' ?/g, '')
.replace(/\balt\s*=\s*[^ '"=<>`]* ?/g, '');
document.getElementById("abc").value = content;
};
<textarea id="abc" cols="50">
<img alt="the_alt_tag" src="the_source" />
</textarea>
<div><input type="button" value="Replace"></div>