Javascript 替换字符串中的最后一个单词

Javascript 替换字符串中的最后一个单词,javascript,replace,Javascript,Replace,我使用API调用来填充我网站上的一些字段。这些字段由地址的不同部分填充。但是,在我的第一个地址行字段中,该值是缩写的。例如,如果我有“史密斯街”,它将被插入为“史密斯街”。为了解决这个问题,我使用javascript替换该值,例如: value = value.replace("St", "Street"); 但是,如果我有一个值,例如“Stanley Street”,它将返回“Streetanley Street” 有人知道我可以用什么方法将replace方法应用于字符串中的最后一个单词吗?

我使用API调用来填充我网站上的一些字段。这些字段由地址的不同部分填充。但是,在我的第一个地址行字段中,该值是缩写的。例如,如果我有“史密斯街”,它将被插入为“史密斯街”。为了解决这个问题,我使用javascript替换该值,例如:

value = value.replace("St", "Street");
但是,如果我有一个值,例如“Stanley Street”,它将返回“Streetanley Street”


有人知道我可以用什么方法将replace方法应用于字符串中的最后一个单词吗?

您正在寻找正则表达式。如果你打算写很多JavaScript,就要习惯它们

value = value.replace(/St$/, "Street");
仅当它是字符串的结尾时,才会替换
“St”
。(
$
匹配字符串末尾)

如果我们想在字符串末尾留出空白,并且仍然替换,我们会说:

value = value.replace(/St\s*$/, "Street");
其中,
\s
表示“任何空白字符”,而
*
表示“0次或更多次”

如果我们想同时匹配
“St”
“St.”
,我们会说:

value = value.replace(/St\.?\s*$/, "Street");
其中,
\。
只是一个“.”,
表示“最多一次”

<>避免在单词的中间替换“st”,使用单词边界(<代码> \b>代码>):

您可能希望使用不区分大小写的匹配(
/i
),因此“Main st”与“Main Street”一样被转换:


你可以在你的词中使用边界。若要创建边界,请将单词包装在

/\bYourWord或words\b/g

value.replace(/\bSt\b/g, "Street");
/\sSt\S*$/
将匹配最后一个单词,如果它多次使用
St
\S
-空格字符,然后使用
St
,然后使用
\S
-非空格字符
*
,然后使用
$/code>-字符串结尾)


然后你需要用
()
包装你需要重复使用的任何部分,然后用
$1
$2
等重复使用它们。你可以使用单词边界表达式:
\b

 var abbreviations= {
    "st":"street",
    "av":"avenue"
    //...
  };

  for( var i in abbreviations ){

    str= str.replace( new RegExp( "\\b" + i + "\\b" ,"i" ) , abbreviations[i] );
  }
document.querySelector(“输入”).addEventListener(“输入”),函数(evt){
document.querySelector(“#output”).innerHTML=更正缩写(evt.target.value);
});
函数缩写(str){
变量缩写={
“街”:“街”,
“av”:“大道”
//...
};
用于(缩写为var i){
str=str.replace(新的RegExp(“\\b”+i+“\\b”,“i”),缩写为[i]);
}
返回str;
};
#输出{
背景:ddd;
宽度:自动;
}



这里有一个副本,它本身被标记为一个副本:我尝试了这个方法,但由于某种原因它没有替换我的“St”值。该值仍然显示为“Church St”-更多示例(在您应该在控制台中看到的注释中)。如果它仍然不符合你的需要,我可以帮助改变它。只要给我一个案例,巫婆不会像你想的那样工作。那工作得很好,你提供了一个很好的解释,谢谢!您可能还希望使用不区分大小写的修饰符
/re/i
或“[Ss]”,以防得到“123 main st”)。此外,包括一个单词边界(如在其他一些答案中)如
/\bSt.?\s*$/i
/\b[Ss]t.?\s*$/
将有助于防止它弄乱地址,如“123 Amethyst”@JohnHascall All true。在最初的答案中,我的注意力有点过于集中。相应更新,谢谢。
value.replace(/\bSt\b/g, "Street");
value = value.replace(/(\s)St(\S*)$/, "$1Street$2");
 var abbreviations= {
    "st":"street",
    "av":"avenue"
    //...
  };

  for( var i in abbreviations ){

    str= str.replace( new RegExp( "\\b" + i + "\\b" ,"i" ) , abbreviations[i] );
  }