如果我运行多个替换检查,为什么它不能正确替换? [英] Why it doesn't replace correctly if I run multiple replace checks?
问题描述
我正在将像 :)
这样的微笑字符替换为图像.如果我只使用
I am replacing smile character like :)
to images. If I use only
var yorum4 = "hello :)";
yorum4 = yorum4.replace(/(:\))/g, "<img class='smileys' src='smile.png' \/>");
它替换正确.但是,当我使用它进行多次替换时,
It replaces correctly. However, when I use this for multiple replaces,
yorum4 = yorum4.replace(/(:\))/g, "<img class='smileys' src='smile.png' \/>");
yorum4 = yorum4.replace(/(:\()/g, "<img class='smileys' src='smile1.png' \/>");
yorum4 = yorum4.replace(/(;\))/g, "<img class='smileys' src='smile2.png' \/>");
它会损坏并像输出一样
<img src="http<img class="
替换多重微笑的正确方法是什么?
What is the correct way to replace multiple smiles ?
这里是完整列表
yorum4 = yorum4.replace(/(:\))/g, "<img class='smileys' src='i.png' \/>");
yorum4 = yorum4.replace(/(;\))/g, "<img class='smileys' src='j.png' \/>");
yorum4 = yorum4.replace(/(:\p)/g, "<img class='smileys' src='b.png' \/>");
yorum4 = yorum4.replace(/(:\P)/g, "<img class='smileys' src='b.png' \/>");
yorum4 = yorum4.replace(/(:\D)/g, "<img class='smileys' src='c.png' \/>");
yorum4 = yorum4.replace(/(:\d)/g, "<img class='smileys' src='c.png' \/>");
yorum4 = yorum4.replace(/(:'\()/g, "<img class='smileys' src='d.png' \/>");
yorum4 = yorum4.replace(/(:\*)/g, "<img class='smileys' src='a.png' \/>");
yorum4 = yorum4.replace(/(<\3)/g, "<img class='smileys' src='f.png' \/>");
yorum4 = yorum4.replace(/(:\o)/g, "<img class='smileys' src='he.png' \/>");
yorum4 = yorum4.replace(/(:\O)/g, "<img class='smileys' src='e.png' \/>");
yorum4 = yorum4.replace(/(:\()/g, "<img class='smileys' src='s.png' \/>");
推荐答案
您的 /:\D/
模式匹配冒号和任何非数字符号,因此可以匹配 URL 协议部分内的 :/
.
Your /:\D/
pattern matches a colon and any non-digit symbol and can thus match a :/
inside a protocol part of an URL.
如果您的意思是 :D
笑脸,只需使用 /:D/
.所有文字字母和数字也是如此:不要对它们进行转义.此外,在整个模式周围使用捕获组是没有意义的,如果您需要在替换模式中引用匹配值,只需使用 $&
(而不是 $1
).
If you meant a :D
smiley, just use /:D/
. Same goes for all the literal letters and digits: do not escape them. Also, there is no point using capturing groups around whole patterns, if you need to reference the match values in the replacement pattern, just use $&
(not $1
).
var yorum4 = "hello :)";
yorum4 = yorum4.replace(/:\)/g, "<img class='smileys' src='i.png' \/>");
yorum4 = yorum4.replace(/;\)/g, "<img class='smileys' src='j.png' \/>");
yorum4 = yorum4.replace(/:p/g, "<img class='smileys' src='b.png' \/>");
yorum4 = yorum4.replace(/:P/g, "<img class='smileys' src='b.png' \/>");
yorum4 = yorum4.replace(/:D/g, "<img class='smileys' src='c.png' \/>");
yorum4 = yorum4.replace(/:d/g, "<img class='smileys' src='c.png' \/>");
yorum4 = yorum4.replace(/:'\(/g, "<img class='smileys' src='d.png' \/>");
yorum4 = yorum4.replace(/:\*/g, "<img class='smileys' src='a.png' \/>");
yorum4 = yorum4.replace(/<3/g, "<img class='smileys' src='f.png' \/>");
yorum4 = yorum4.replace(/:o/g, "<img class='smileys' src='he.png' \/>");
yorum4 = yorum4.replace(/:O/g, "<img class='smileys' src='e.png' \/>");
yorum4 = yorum4.replace(/:\(/g, "<img class='smileys' src='s.png' \/>");
console.log(yorum4);
另一个提示:您可能想要使用单词边界和非单词边界,例如 /\B:\)\B/
或 /\B:D\b/
(在非单词字符之前/之后添加非单词边界 \B
和单词字符之前/之后的单词边界 \b
)将这些笑脸匹配为整个单词",但没有实际数据很难说.
Another hint: you might want to use word boundaries and non-word boundaries, like /\B:\)\B/
or /\B:D\b/
(adding non-word boundary \B
before/after non-word chars and word boundaries \b
before/after word chars) to match these smileys as "whole words", but it is difficult to say without the actual data.
这篇关于如果我运行多个替换检查,为什么它不能正确替换?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!