Javascript正则表达式查找两个单词之间的所有逗号
我试图找到两个单词之间的所有逗号,并用JS中的另一个字符串替换它们。 我尝试过我找到的每一个解决方案,但都失败了 我有这个HTML片段(这只是一个看起来像HTML的字符串,而不是一个 真实html文档)Javascript正则表达式查找两个单词之间的所有逗号,javascript,regex,Javascript,Regex,我试图找到两个单词之间的所有逗号,并用JS中的另一个字符串替换它们。 我尝试过我找到的每一个解决方案,但都失败了 我有这个HTML片段(这只是一个看起来像HTML的字符串,而不是一个 真实html文档) a、 span{color:#29728D;文本装饰:下划线;} a:悬停{颜色:#69621C;文本装饰:下划线;} 正文,td{字体大小:9pt;颜色:#333333} 红、白、蓝 现在我要做的是用“逗号”之类的随机词替换样式标记中的逗号。 但不替换p中的逗号或任何其他标记 我得到的最接
a、 span{color:#29728D;文本装饰:下划线;}
a:悬停{颜色:#69621C;文本装饰:下划线;}
正文,td{字体大小:9pt;颜色:#333333}
红、白、蓝
现在我要做的是用“逗号”之类的随机词替换样式标记中的逗号。但不替换p中的逗号或任何其他标记 我得到的最接近的结果是
(?\w)*),+(?=\w |\w())
但没有起作用
任何帮助都将不胜感激。如果您使用DOM访问,您可以更改内容
const片段=`
a、 span{color:#29728D;文本装饰:下划线;}
a:悬停{颜色:#69621C;文本装饰:下划线;}
正文,td{字体大小:9pt;颜色:#333333}
红、白、蓝`
const domSnippet=document.createElement(“x”);
domsippet.innerHTML=snippet;
const st=domSnippet.querySelector(“样式”).textContent;
domsippet.querySelector(“style”).textContent=st.replace(/,/g,”;)
log(domsippet.innerHTML)代码>
a、 span{color:#29728D;文本装饰:下划线;}
a:悬停{颜色:#69621C;文本装饰:下划线;}
正文,td{字体大小:9pt;颜色:#333333}
红色、白色、蓝色
如果使用DOM访问,则可以更改内容
const片段=`
a、 span{color:#29728D;文本装饰:下划线;}
a:悬停{颜色:#69621C;文本装饰:下划线;}
正文,td{字体大小:9pt;颜色:#333333}
红、白、蓝`
const domSnippet=document.createElement(“x”);
domsippet.innerHTML=snippet;
const st=domSnippet.querySelector(“样式”).textContent;
domsippet.querySelector(“style”).textContent=st.replace(/,/g,”;)
log(domsippet.innerHTML)代码>
a、 span{color:#29728D;文本装饰:下划线;}
a:悬停{颜色:#69621C;文本装饰:下划线;}
正文,td{字体大小:9pt;颜色:#333333}
红色、白色、蓝色
如果我理解正确,您希望修改该字符串中的css选择器。
您可以做的是将字符串解析为HTML,获取
元素,修改其CSS规则(特别是selectorText
),然后从所有修改的规则中构建一个字符串,并将其设置为
元素的新HTML内容
以下是一个例子:
const content=`
a、 span{color:#29728D;文本装饰:下划线;}
a:悬停{颜色:#69621C;文本装饰:下划线;}
正文,td{字体大小:9pt;颜色:#333333}
红、白、蓝`
const doc=new DOMParser().parseFromString(内容为'text/html');
const style=doc.querySelector('style');
const result=[…style.sheet.cssRules]
.减少((acc,规则)=>{
rule.selectorText=rule.selectorText.replace(/\s*,\s*/g,'逗号');
acc+=rule.cssText+'\n';
返回acc;
},“\n”);
style.innerHTML=结果;
const newContent=doc.head.innerHTML+'\n'+doc.body.innerHTML;
console.log(newContent)代码>如果我理解正确,您希望修改该字符串中的css选择器。
您可以做的是将字符串解析为HTML,获取
元素,修改其CSS规则(特别是selectorText
),然后从所有修改的规则中构建一个字符串,并将其设置为
元素的新HTML内容
以下是一个例子:
const content=`
a、 span{color:#29728D;文本装饰:下划线;}
a:悬停{颜色:#69621C;文本装饰:下划线;}
正文,td{字体大小:9pt;颜色:#333333}
红、白、蓝`
const doc=new DOMParser().parseFromString(内容为'text/html');
const style=doc.querySelector('style');
const result=[…style.sheet.cssRules]
.减少((acc,规则)=>{
rule.selectorText=rule.selectorText.replace(/\s*,\s*/g,'逗号');
acc+=rule.cssText+'\n';
返回acc;
},“\n”);
style.innerHTML=结果;
const newContent=doc.head.innerHTML+'\n'+doc.body.innerHTML;
console.log(newContent)代码>这里有一个使用纯字符串函数的解决方案。没有正则表达式,没有DOM解析。此方法比使用DOMParser()
更健壮,因为它可以安全地处理损坏的HTML而不会出错,并且如果需要,它将在浏览器之外工作
const document\u body=`
a、 span{color:#29728D;文本装饰:下划线;}
a:悬停{颜色:#69621C;文本装饰:下划线;}
正文,td{字体大小:9pt;颜色:#333333}
红、白、蓝;
已解析变量,已修改=文档\正文,当前\索引=-1;
while((已解析=getTagContent(已修改,,'',当前索引))!==false){
让tag_contents=modified.substring(parsed.start,parsed.end);
让modified_tag_contents=tag_contents.replace(/,/g,'COMMA');
modified=modified.substring(0,parsed.start)+modified_tag_contents+modified.substring(parsed.end);
当前索引=parsed.end-(修改的标签内容.length-标签内容.length);
}
控制台日志(“原件:+文件正文);
console.log(“modified:+modified”);
函数getTagContent(html\u正文、开始标记、结束标记、开始索引=0){
var start=html\u body.indexOf(开始标记,开始索引);
if(start==-1)返回false;
var end=html\u body.indexOf(end\u标记,start);
if(end==-1)返回false;
返回{
开始:开始+开始标记长度,
结束
};
}
这里有一个使用纯字符串函数的解决方案。没有正则表达式,没有DOM解析。此方法比使用DOMParser()
更健壮,因为它可以安全地处理损坏的HTML而不会出错,并且如果需要,它将在浏览器之外工作
const document\u body=`
a、 span{color:#29728D;文本装饰:下划线;}
a:悬停{颜色:#69621C;文本装饰:下划线;}
正文,td{字体大小:9pt;颜色:#333333}
红、白、蓝;
已解析变量,已修改=docume
<style>
a,span{color:#29728D;text-decoration: underline;}
a:hover{ color:#69621C;text-decoration: underline;}
body, td{font-size:9pt; color:#333333}
</style>
<p>red, white, blue</p>