我在JavaScript中有可能包含缩写的字符串。我需要一个能够可靠地替换这些缩写的正则表达式。我不太擅长正则表达式,所以我需要一些帮助。这是一个简单的例子:
var string1="Home in the USA";
var string2="SOME USABILITY...";
var string3="The USA is home";
string1.replace(/USA/,"United States of America")
有三个可能的字符串,我想用“美利坚合众国”取代“USA”,但我不希望它触及第二个字符串,因为它显然是一个不同的词。所以我需要一个正则表达式,只有当下面的字符是空格或什么都没有时才会替换匹配的缩写。任何帮助将不胜感激。
答案 0 :(得分:1)
您需要为此使用单词边界。简单的正则表达式是:/\bUSA\b/g
这表示在美国之前或之后必须有一个单词边界。另外需要注意的是,这是一个GLOBAL正则表达式,因此它将用字边界替换每个出现的“USA”,而不仅仅是第一个。看看这个regexer:
答案 1 :(得分:-1)
TL; DR:/(?:\s)USA(?:\s)/
,但请查看底部更复杂的功能。
如果要检查以下字符是否为空格,只需添加一个前瞻,如下所示:
const strs = [
'USA is a country',
'They say USA there',
'We are in the USA',
'SOME USABILITY'
];
const pattern = /USA(?:\s)/;
const replacement = 'United States of America ';
console.log(strs.map(str => str.replace(pattern, replacement)));
注意两件事:
replace()
功能中,它会替换整个模式,因此您需要将空间添加回替换。如果你想看看双方,那几乎是一样的:
const strs = [
'USA is a country',
'They say USA there',
'We are in the USA',
'SOME USABILITY'
];
const pattern = /(?:\s)USA(?:\s)/;
const replacement = ' United States of America ';
console.log(strs.map(str => str.replace(pattern, replacement)));
如果你想在任何地方处理,你还需要添加一个检查字符串的开头或结尾:
const strs = [
'USA is a country',
'They say USA there',
'We are in the USA',
'SOME USABILITY'
];
const pattern = /(?:\s|^)USA(?:\s|$)/;
const replacement = ' United States of America ';
console.log(strs.map(str => str.replace(pattern, replacement).trim()));
请注意,在这种情况下,我们还会修剪额外的东西。
一种稍微清洁的方法,所以你不必担心多余的空间就可以通过几个步骤来做事:
const strs = [
'USA is a country',
'They say USA there',
'We are in the USA',
'SOME USABILITY'
];
const target = 'USA';
const replacement = 'United States of America';
const replaceWord = (str, word, replacement) => {
const pattern = new RegExp(`(?:[^a-zA-Z-]|^)(${target})(?:[^a-zA-Z-]|$)`, 'g');
return (str.match(pattern) || [])
.reduce((result, match) => result.replace(match, match.replace(word, replacement)), str);
};
console.log(strs.map(str => replaceWord(str, target, replacement)));
这是一个更复杂的解决方案。首先,我将模式更新为不寻找空格,而是任何非字母的(以说明与逗号和句点等内容相冲突的单词)。
我们实际的替换首先获得所有匹配(使用额外的检查)。然后我们查看它,并且对于每个匹配,您只替换原始目标,然后使用整个位替换前一个匹配。
这更加灵活。
我还将模式构建为变量,因此您可以替换任何单词。