我有一个包含单词的句子(字符串)。我想用一个单词替换所有出现的单词。我使用newString = oldString.replace(/w1/gi, w2);
,但现在我需要向用户报告我实际替换了多少个单词。
有没有一种快速的方法可以不借助:
oldString
与newString
并计算差异?
(简单的情况是如果oldString === newString => 0替换,但除此之外,我将不得不在两者上运行并进行比较。)我可以在这里使用任何RegEx“技巧”,还是应该避免使用g
标志?
答案 0 :(得分:3)
replace
回调通过使用回调,您可以递增计数器,然后在回调中返回新单词,这允许您只遍历字符串一次,并实现计数。
var string = 'Hello, hello, hello, this is so awesome';
var count = 0;
string = string.replace(/hello/gi, function() {
count++;
return 'hi';
});
console.log('New string:', string);
console.log('Words replaced', count);

split
和 join
同样使用split方法,而不是使用正则表达式,只需加入新单词即可创建新字符串。此解决方案允许您完全避免使用正则表达式来实现计数。
var string = 'Hello, hello, hello, this is so awesome';
string = string.split(/hello/i);
var count = string.length - 1;
string = string.join('Hi');
console.log('New string:', string);
console.log('Words replaced', count);

答案 1 :(得分:2)
您可以使用正在使用的正则表达式拆分字符串并获取长度。
var string = "The is the of the and the";
var newString = string.replace(/the/gi, "hello");
var wordsReplaced = string.split(/the/gi).length - 1;
console.log("Words replaced: ", wordsReplaced);
工作示例:
doSomething()