我使用JavaScript的replace()函数来替换匹配A-Z,a-z,0-9,短划线( - ),下划线(_)和点(。)的正则表达式。我试图用匹配的字符串的一部分替换它周围的标签,但我只用以下代码替换匹配:< b> $ 1< / b&gt ;.
请帮忙吗?
<!DOCTYPE html>
<html>
<body>
<textarea id="demo" rows="10" cols="20">
<table></table>
<b><i>#stock-jsod.20</i>
</b>
</textarea>
<button onclick="testit()">test</button>
<script type="text/javascript">
function testit()
{
var str=document.getElementById("demo").value;
var n = str.replace(/#([A-Za-z0-9_.-]+)/gi, "<b>$0</b>");
document.getElementById("demo").innerHTML=n;
}
</script>
</body>
</html>
我的目标是将#stock-jsod.20替换为<b>#stock-jsod.20</b>
,但目前只会将其替换为<b>$0</b>
。
答案 0 :(得分:2)
尝试使用“$&
”代替“$1
”。
更多关于外观 - &gt; https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/String/replace#Description
更新:您需要使用document.getElementById("demo").value
来获取“document.getElementById("demo").innerHTML
”元素的内容,而不是demo
。
答案 1 :(得分:1)
除了工程师的答案,你也不是A-Za-z0-9_
。您可以使用\w
。那么你也不需要不区分大小写的开关。这是一个更简单的正则表达式,可以达到同样的效果:
var n = str.replace(/#[\w.-]+/g, "<b>$&</b>");
示例输出:
> str = '#abc #def ghi'
"#abc #def ghi"
> str.replace(/#[\w.-]+/g, "<b>$&</b>");
"<b>#abc</b> <b>#def</b> ghi"