Javascript 替换句子中的第n个单词
我有一个获取字符串的函数,我正在寻找格式化第三个单词的方法(这是数字,我想用逗号格式化)。知道怎么做吗? 应该是这样的:Javascript 替换句子中的第n个单词,javascript,regex,string,Javascript,Regex,String,我有一个获取字符串的函数,我正在寻找格式化第三个单词的方法(这是数字,我想用逗号格式化)。知道怎么做吗? 应该是这样的: function formatNumber(txt){ return txt.replace(3rd-word, formatNumber(3rd-word)); } 通过将句子拆分并按指定对单词索引执行替换,可以从句子中获取第n个单词 下面是代码的演示: var-station=“总数是123456789!” var formatNumber=函数(值){ 返回值
function formatNumber(txt){
return txt.replace(3rd-word, formatNumber(3rd-word));
}
通过将句子拆分并按指定对单词索引执行替换,可以从句子中获取第n个单词 下面是代码的演示:
var-station=“总数是123456789!”
var formatNumber=函数(值){
返回值.toString().replace(/\B(?=(\d{3})+(?!\d))/g,“,”;
}
var replaceWord=函数(句子、词性、格式函数){
var matches=句子匹配(/(\b[^\s]+\b)/g);
if(pos<0&&pos>=匹配.length){
抛出“索引超出范围:”+pos;
}
var匹配=匹配[pos];
var bounded=newregexp('\\b'+match+'\\b');
返回语句.replace(有界,formatterFunction(match));
};
console.log(replaceWord(句子,2,格式编号));//总数是123456789!
匹配由数字组成的任何单词,并设置其格式:
txt = txt.replace(/\b(\d+)\b/g, format);
使用格式化功能,例如:
function format(s) {
var r = '';
while (s.length > 3) {
r = ',' + s.substr(s.length - 3) + r;
s = s.substr(0, s.length - 3);
}
return s + r;
}
演示:将其分解为多个部分
- 创建一个函数,将单词转换为所需的格式
- 把你的句子分成几个字
- 对适当的单词运行该函数
- 把单词放回句子中
var transformNth = function(n, fn) {
return function(arr) {
arr[n] = fn(arr[n]);
return arr;
}
};
var makeWords = function(sentence) {return sentence.split(" ");};
var upperCase = function(word) {return word.toUpperCase();}
var transformSentence = function(sentence) {
// index 2 is the third word
return transformNth(2, upperCase)(makeWords(sentence)).join(" ");
}
transformSentence("I have a function that get string");
//=> "I have A function that get string"
transformSentence("I'm looking for a way to format the 3rd word");
//=> "I'm looking FOR a way to format the 3rd word"
transformSentence("which is number");
//=> "which is NUMBER"
transformSentence("that i want to format it with comma");
//=> "that i WANT to format it with comma"
transformSentence("any idea how to do it?");
//=> "any idea HOW to do it?"
transformSentence("should be something like that");
//=> "should be SOMETHING like that"
如果你的句子的结构比你想保留的单词的单个空格分隔更复杂,那么可能会有问题…为什么你不只是匹配第一组数字?你说的“单词”是什么意思?在许多语言中,单词不被空格分隔,因此寻找单词边界。这不会取代第三个单词,它会取代第三个单词的第一次出现。试一下句子
“Busses with us in the the this”
…它仍然没有取代第三个单词,它取代了第三个单词的第一个出现。为什么格式化函数。调用(未定义,匹配)
而不是简单的格式化函数(匹配)
?试一下句子“Num12345678和34567”
,您得到的结果是“Num12345678和34567”
,而不是“Num12345678和34567”
。添加:RegExp('\\b'+match+'\\b')代码>这将只匹配-1.2345e9
中的1
,这可能不是OP查找“数字”时所期望的结果。@MikeSamuel:这是可能的,问题不清楚。答案的第一句话提到了这一限制。
var transformNth = function(n, fn) {
return function(arr) {
arr[n] = fn(arr[n]);
return arr;
}
};
var makeWords = function(sentence) {return sentence.split(" ");};
var upperCase = function(word) {return word.toUpperCase();}
var transformSentence = function(sentence) {
// index 2 is the third word
return transformNth(2, upperCase)(makeWords(sentence)).join(" ");
}
transformSentence("I have a function that get string");
//=> "I have A function that get string"
transformSentence("I'm looking for a way to format the 3rd word");
//=> "I'm looking FOR a way to format the 3rd word"
transformSentence("which is number");
//=> "which is NUMBER"
transformSentence("that i want to format it with comma");
//=> "that i WANT to format it with comma"
transformSentence("any idea how to do it?");
//=> "any idea HOW to do it?"
transformSentence("should be something like that");
//=> "should be SOMETHING like that"