我试图仅替换整个单词,但我的脚本替换了该单词的所有区分大小写的实例。这是我的代码:
<script>
function repl() {
var lyrics = document.getElementById('Lyricstuff').value;
var find = document.getElementById('rs1').innerHTML;
var spantag = document.getElementById('rt1').innerHTML;
var regex = new RegExp(find, "g");
document.getElementById('Results').value = lyrics.replace(regex, spantag) ;
}
</script>
<textarea id="Lyricstuff" cols="60" rows="10">C CAT cat</textarea>
<button onclick="repl()">Replace</button>
<textarea id="Results" cols="60" rows="10"></textarea>
<span id="rt1">B</span><span id="rs1">C</span>
在上面的示例中,结果显示为“B BAT cat”,但我期望的是“B CAT cat”。我搜索过这个问题,但找不到任何相关内容。
有人能帮帮我吗?任何帮助表示赞赏。
我在这里添加了一个小提琴:http://jsfiddle.net/1z8f7b23/ http://jsfiddle.net/1z8f7b23/
如果您只想搜索整个单词,您可以将搜索表达式括起来\b
锚点(单词边界)。
单词边界是之间的任意位置\w
and [\W
或字符串的开头/结尾]。也就是说,它在一个字符匹配的字符之间进行匹配[a-zA-Z0-9_]
但另一个则不然。
function repl() {
var lyrics = document.getElementById('Lyricstuff').value;
var find = document.getElementById('rs1').innerHTML;
var spantag = document.getElementById('rt1').innerHTML;
var regex = new RegExp('\\b' + find + '\\b', "g");
document.getElementById('Results').value = lyrics.replace(regex, spantag) ;
}
<textarea id="Lyricstuff" cols="60" rows="4">C CAT cat</textarea>
<button onclick="repl()">Replace</button>
<textarea id="Results" cols="60" rows="4"></textarea>
<span id="rt1">B</span><span id="rs1">C</span>
如果你想更换C#
,你不能使用\b
不再是因为#
角色不在\w
。您必须提供您自己的断言版本。对于单词结尾来说这很简单,但对于单词开头则不然,因为 JS 不支持lookbehinds。所以你必须使用一个解决方法:
function repl() {
var lyrics = document.getElementById('Lyricstuff').value;
var find = document.getElementById('rs1').value;
var spantag = document.getElementById('rt1').value;
// I don't know if you want this or not...
find = find.replace(/[-\\()\[\]{}^$*+.?|]/g, '\\$&');
var regex = new RegExp('(\\s|^)(?:' + find + ')(?=\\s|$)', "g");
document.getElementById('Results').value = lyrics.replace(regex, "$1" + spantag);
}
<textarea id="Lyricstuff" cols="60" rows="4">This is C# and this is C#m</textarea>
<button onclick="repl()">Replace</button>
<textarea id="Results" cols="60" rows="4"></textarea><br/>
<input id="rs1" value="C#"/><input id="rt1" value="1"/>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)