2

我正在使用 JavaScript 的 replace() 函数替换匹配 AZ、az、0-9、破折号 (-)、下划线 (_) 和点 (.) 的正则表达式。我正在尝试将其替换为匹配字符串的一部分并带有标签,但我的代码仅将匹配项替换为:<b>$1</b>。

请问有什么帮助吗?

<!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>.

4

2 回答 2

2

尝试使用 ' $&' 而不是 ' $1'。

更多关于外观 -> https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/String/replace#Description

更新:而不是document.getElementById("demo").value您需要document.getElementById("demo").innerHTML用于获取 ' demo' 元素的内容。

于 2012-06-24T18:41:16.027 回答
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"
于 2012-06-24T18:41:11.713 回答