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"