【发布时间】:2011-05-20 21:01:41
【问题描述】:
我有两个变量,需要将字符串b 插入到字符串a 中由position 表示的点。我正在寻找的结果是“我想要一个苹果”。如何使用 JavaScript 做到这一点?
var a = 'I want apple';
var b = ' an';
var position = 6;
【问题讨论】:
标签: javascript
我有两个变量,需要将字符串b 插入到字符串a 中由position 表示的点。我正在寻找的结果是“我想要一个苹果”。如何使用 JavaScript 做到这一点?
var a = 'I want apple';
var b = ' an';
var position = 6;
【问题讨论】:
标签: javascript
用RegExp替换
var a = 'I want apple';
var b = ' an';
var position = 6;
var output = a.replace(new RegExp(`^(.{${position}})(.*)`), `$1${b}$2`);
console.log(output);
信息:
【讨论】:
var a = "I want apple";
var b = " an";
var position = 6;
var output = [a.slice(0, position), b, a.slice(position)].join('');
console.log(output);
以下可用于将text 拼接到另一个字符串中所需的index,并带有可选的removeCount 参数。
if (String.prototype.splice === undefined) {
/**
* Splices text within a string.
* @param {int} offset The position to insert the text at (before)
* @param {string} text The text to insert
* @param {int} [removeCount=0] An optional number of characters to overwrite
* @returns {string} A modified string containing the spliced text.
*/
String.prototype.splice = function(offset, text, removeCount=0) {
let calculatedOffset = offset < 0 ? this.length + offset : offset;
return this.substring(0, calculatedOffset) +
text + this.substring(calculatedOffset + removeCount);
};
}
let originalText = "I want apple";
// Positive offset
console.log(originalText.splice(6, " an"));
// Negative index
console.log(originalText.splice(-5, "an "));
// Chaining
console.log(originalText.splice(6, " an").splice(2, "need", 4).splice(0, "You", 1));
.as-console-wrapper { top: 0; max-height: 100% !important; }
【讨论】:
var output = [a.slice(0, position + 1), b, a.slice(position)].join(''); 给操作人员“我想要一个苹果”,而不是“我想要一个苹果” "。
如果 ES2018 的后视是 available,这是另一种正则表达式解决方案,它利用它在第 N 个字符之后的 零宽度位置“替换”(类似于 @Kamil Kiełczewski,但不将初始字符存储在捕获组中):
"I want apple".replace(/(?<=^.{6})/, " an")
var a = "I want apple";
var b = " an";
var position = 6;
var r= a.replace(new RegExp(`(?<=^.{${position}})`), b);
console.log(r);
console.log("I want apple".replace(/(?<=^.{6})/, " an"));
【讨论】:
var output = a.substring(0, position) + b + a.substring(position);
编辑:将 .substr 替换为 .substring,因为 .substr 现在是旧功能(根据 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/substr)
【讨论】:
String.prototype.substr 现在已弃用。 developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
substring 在这种情况下是直接替换已弃用的substr,因此答案变为:var output = a.substring(0, position) + b + a.substring(position);。
.substring
您可以将此函数添加到字符串类中
String.prototype.insert_at=function(index, string)
{
return this.substr(0, index) + string + this.substr(index);
}
这样你就可以在任何字符串对象上使用它:
var my_string = "abcd";
my_string.insertAt(1, "XX");
【讨论】:
camelCase 而不是underscore_case
使用 ES6 字符串文字,会更短:
const insertAt = (str, sub, pos) => `${str.slice(0, pos)}${sub}${str.slice(pos)}`;
console.log(insertAt('I want apple', ' an', 6)) // logs 'I want an apple'
【讨论】:
试试
a.slice(0,position) + b + a.slice(position)
var a = "I want apple";
var b = " an";
var position = 6;
var r= a.slice(0,position) + b + a.slice(position);
console.log(r);
或正则表达式解决方案
"I want apple".replace(/^(.{6})/,"$1 an")
var a = "I want apple";
var b = " an";
var position = 6;
var r= a.replace(new RegExp(`^(.{${position}})`),"$1"+b);
console.log(r);
console.log("I want apple".replace(/^(.{6})/,"$1 an"));
【讨论】:
快速修复!如果不想手动添加空格,可以这样做:
var a = "I want apple";
var b = "an";
var position = 6;
var output = [a.slice(0, position + 1), b, a.slice(position)].join('');
console.log(output);
(编辑:我看到上面确实回答了这个问题,对不起!)
【讨论】:
Underscore.String 库具有执行 Insert 的函数
插入(字符串、索引、子字符串)=> 字符串
像这样
insert("Hello ", 6, "world");
// => "Hello world"
【讨论】:
如果您像这样使用 indexOf() 确定 position 可能会更好:
function insertString(a, b, at)
{
var position = a.indexOf(at);
if (position !== -1)
{
return a.substr(0, position) + b + a.substr(position);
}
return "substring not found";
}
然后像这样调用函数:
insertString("I want apple", "an ", "apple");
请注意,我在函数调用中的“an”之后放置了一个空格,而不是在 return 语句中。
【讨论】:
var array = a.split(' ');
array.splice(position, 0, b);
var output = array.join(' ');
这会更慢,但会注意在 an 之前和之后添加空间 此外,您必须更改 position 的值(改为 2,现在更直观)
【讨论】:
只是一个小小的改变,因为上面的解决方案输出了
“我想要一个苹果”
而不是
“我想要一个苹果”
获取输出为
“我想要一个苹果”
使用以下修改后的代码
var output = a.substr(0, position) + " " + b + a.substr(position);
【讨论】: