字符串替换仅替换第一个匹配,不能使其全局

时间:2016-05-02 18:36:47

标签: javascript string replace

请帮助我,因为我在编程方面是一个菜鸟。我该怎么做才能让它替换所有的字符串匹配?如果我写/ http://example.com/ad//g而不是" http://example.com/ad/"它也不会正常运行。



<!DOCTYPE html>
<html>
<body>

<h3>Instert your links</h3>

input:<br>
<textarea id="myTextarea">
http://example.com/ad/123.html
http://example.com/ad/345.html
http://example.com/ad/3567.html
</textarea>



<button type="button" onclick="myFunction()">Get clean links</button>

<p id="links"></p>

<script>
function myFunction() {
    var x = document.getElementById("myTextarea").value;
    var x = x.replace("http://example.com/ad/", "http://example.com/story/"); 
    var x = x.replace("\n","</br>");
    document.getElementById("links").innerHTML = x;
}
</script>

</body>
</html>
&#13;
&#13;
&#13;

4 个答案:

答案 0 :(得分:1)

由于您无法直接向String.prototype.replace提供全局标志,因此需要将其作为第一个参数传递给RegExp:

x.replace(/\n/g, '</br>')

如果您不关心在替换中使用原始值,则可以继续传递字符串作为第二个参数。

<!DOCTYPE html>
<html>
<body>

<h3>Instert your links</h3>

input:<br>
<textarea id="myTextarea">
http://example.com/ad/123.html
http://example.com/ad/345.html
http://example.com/ad/3567.html
</textarea>



<button type="button" onclick="myFunction()">Get clean links</button>

<p id="links"></p>

<script>
function myFunction() {
    var x = document.getElementById("myTextarea").value;
    var x = x.replace(/http:\/\/example.com\/ad\//g, "http://example./com/story/"); 
    var x = x.replace(/\n/g,"</br>");
    document.getElementById("links").innerHTML = x;
}
</script>

</body>
</html>

答案 1 :(得分:0)

您需要使用带有全局标志的正则表达式:

x = x.replace(/http:\/\/example\.com\/ad\//g, "http://example.com/story/"); 
x = x.replace(/\n/g,"</br>");

请注意,您需要转义任何特殊字符。

答案 2 :(得分:0)

g标志应该可以正常工作。尝试使用正则表达式时的问题可能与/需要在JavaScript正则表达式文字中转义的事实有关。试试这个:

document.getElementById("links").innerHTML = document.getElementById("myTextarea")
  .value
  .replace(/http:\/\/example\.com\/ad\//g, "http://example.com/story/")
  .replace(/\n/g, "<br>");

答案 3 :(得分:0)

@FXML private void minimizeWindow(MouseEvent event) { Stage window = (Stage) ((Rectangle) event.getSource()).getScene().getWindow(); this.minButton.setStyle("-fx-fill: blue;"); AnimationTimer timer = new AnimationTimer() { int count = 2; @Override public void handle(long now) { if (--count <= 0) { window.setIconified(true); this.stop(); } } }; timer.start(); } 函数只会替换第一次出现:

来自: this link

  

如果要替换值(而不是正则表达式),则只替换值的第一个实例。要替换所有出现的指定值,请使用global(g)修饰符(请参阅下面的“更多示例”)。

要执行全局替换,您应该在replace函数的第一个参数中使用正则表达式。在你的情况下:

replace

我希望它可以帮到你!