我有以下html:
<span class='token-item' style='" + token_style + "'>" + token + "</span>
我想用字符串&#34;%&#34;替换整个字符串。 + token +&#34;%&#34;。
到目前为止,我得到了这个:
html.replace(/<span class=\"token-item\"[^>]*(.*)</span>/g, "%" + "\1" + "%" );
然而它不起作用。有没有办法用正则表达式的一部分替换正则表达式?
答案 0 :(得分:0)
试试这个:
html.replace("/<span class='token-item'[^>]*?>(.*)</span>/g", "%" + "\1" + "%" );
我对你原来的一些做了一些细微的改动。原始正则表达式中的双引号中有token-item
,但您的示例使用单引号。此外,正则表达式模式需要双引号。我通过在其后面添加[^>]*
来使角色类?
非贪婪。如果没有这个,我担心你的原始正则表达式会消耗所有内容,直到最后的<span>
标记。
您可以在此处测试正则表达式:
<span class='token-item'[^>]*?>(.*)</span>
答案 1 :(得分:0)
您可以重复搜索字符串中的span元素,获取第一个匹配项,然后使用另一个正则表达式在匹配项中获取该标记,然后使用该标记替换第一个匹配项。执行此操作直到在字符串中找不到span元素。
<script type="text/javascript">
function replaceWithToken(input) {
var spanEx = /<span class='token-item'[^>]*>[^<>]*<\/span>/;
var tokenEx = />.*</;
var output = input;
while (true) {
var matches = spanEx.exec(output);
//if no more span element found, stop
if (matches == null || matches.length == 0)
break;
var span = matches[0];
//get the token from the match, in the form of >token<
var token = tokenEx.exec(span)[0];
//remove the > and < and add % in front and back
token = '%' + token.substring(1, token.length - 1) + '%';
//replace the first match with the token
output = output.replace(span, token);
}
return output;
}
var input = "<span class='token-item' style='token_style'>this is the first token</span>"
+ "<br /><span class='token-item'>this is the second token</span>";
var output = replaceWithToken(input);
console.log(input);
console.log(output);
</script>
答案 2 :(得分:0)
您也可以使用此正则表达式:/<span class=\'token-item\'[^>]*?>.*?(\w+).*?<\/span>/g
代码示例:
token = "sampleToken";
token_style = "none;"
html = "<span class='token-item' style='" +token_style+ "'>" + token +"</span>";
re = /<span class=\'token-item\'[^>]*?>.*?(\w+).*?<\/span>/g;
console.log(html);
console.log(html.replace(re,"%$1%"));