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