我非常接近这一点,但这是不对的。 我想做的就是从字符串中删除字符“r”。 问题是,字符串中有多个“r”实例。 但是,它始终是索引4处的字符(因此是第5个字符)。
示例字符串:“crt / r2002_2” 我想要的是:“crt / 2002_2”
此替换功能删除“r”
mystring.replace(/r/g, '')
制作:“ct / 2002_2”
我试过这个功能:
String.prototype.replaceAt = function (index, char) {
return this.substr(0, index) + char + this.substr(index + char.length);
}
mystring.replaceAt(4, '')
只有在我用另一个角色替换它时它才有效。它不会简单地删除它。
有什么想法吗?
答案 0 :(得分:383)
var mystring = "crt/r2002_2";
mystring = mystring.replace('/r','/');
将使用String.prototype.replace
将/r
替换为/
。
或者,您可以使用带有全局标记的正则表达式(如下面的Erik Reppen& Sagar Gala所示)来替换所有出现的内容
mystring = mystring.replace(/\/r/g, '/');
答案 1 :(得分:52)
一个简单的功能性JavaScript方式是
mystring = mystring.split('/r').join('/')
简单,快速,全局替换,无需功能或原型
答案 2 :(得分:46)
总是有字符串函数,如果你知道你总是要删除第四个字符:
str.slice(0, 4) + str.slice(5, str.length))
答案 3 :(得分:25)
你的第一个功能几乎是正确的。只需删除代表'global'(编辑)的'g'标志,并给它一些上下文来发现第二个'r'。
编辑:没有看到它是第二个'r'之前添加了'/'。当使用regEx arg时,需要\ /以逃避'/'。感谢upvotes,但我错了所以我会修复并为有兴趣了解regEx基础知识的人添加更多细节,但这样可行:
mystring.replace(/\/r/, '/')
现在有过多的解释:
当读/写regEx模式时,请考虑:<一个字符或一组字符>然后是<一个字符或一组字符>然后是< ...
在regEx<一个字符或一组字符>可能是一次一个:
/each char in this pattern/
所以读作e,接着是a,然后是c等......
或单个<一个字符或一组字符>可以是字符类描述的字符:
/[123!y]/
//any one of these
/[^123!y]/
//anything but one of the chars following '^' (very useful/performance enhancing btw)
或扩展以匹配一定数量的字符(但仍然最好将其视为顺序模式中的单个元素):
/a{2}/
//precisely two 'a' chars - matches identically as /aa/ would
/[aA]{1,3}/
//1-3 matches of 'a' or 'A'
/[a-zA-Z]+/
//one or more matches of any letter in the alphabet upper and lower
//'-' denotes a sequence in a character class
/[0-9]*/
//0 to any number of matches of any decimal character (/\d*/ would also work)
所以一群人一起生气:
var rePattern = /[aA]{4,8}(Eat at Joes|Joes all you can eat)[0-5]+/g
var joesStr = 'aaaAAAaaEat at Joes123454321 or maybe aAaAJoes all you can eat098765';
joesStr.match(rePattern);
//returns ["aaaAAAaaEat at Joes123454321", "aAaAJoes all you can eat0"]
//without the 'g' after the closing '/' it would just stop at the first match and return:
//["aaaAAAaaEat at Joes123454321"]
当然,我已经过度阐述,但我的观点仅仅是这个:
/cat/
是一系列3个模式元素(事后面跟着一个东西)。
这就是:
/[aA]{4,8}(Eat at Joes|Joes all you can eat)[0-5]+/
由于regEx开始看起来很古怪,所以这一切都会分解为一系列事物(可能是多角色的事物)。这是一个基本点,但是我花了一段时间才过去,所以我已经过分解释它,因为我认为这将有助于OP和其他新的regEx了解正在发生的事情。阅读/编写regEx的关键是将其分解为这些部分。
答案 4 :(得分:10)
对于' / r'的全球替换,此代码适用于我。
mystring = mystring.replace(/\/r/g,'');
答案 5 :(得分:4)
只需修正您的replaceAt
:
String.prototype.replaceAt = function(index, charcount) {
return this.substr(0, index) + this.substr(index + charcount);
}
mystring.replaceAt(4, 1);
我称之为removeAt
。 :)
答案 6 :(得分:4)
return this.substr(0, index) + char + this.substr(index + char.length);
char.length
为零。在这种情况下,您需要添加1
才能跳过字符。
答案 7 :(得分:4)
let str = '1234567';
let index = 3;
str = str.substring(0, index) + str.substring(index + 1);
console.log(str) // 123567 - number "4" under index "3" is removed
答案 8 :(得分:2)
如果它始终是yourString中的第4个字符,您可以尝试:
yourString.replace(/^(.{4})(r)/, function($1, $2) { return $2; });
答案 9 :(得分:2)
只有在我用另一个角色替换它时它才有效。它不会简单地删除它。
这是因为当char
等于""
时,char.length
为0,因此您的子字符串组合起来形成原始字符串。继续您的代码尝试,以下将起作用:
String.prototype.replaceAt = function (index, char) {
return this.substr(0, index) + char + this.substr(index + 1);
// this will 'replace' the character at index with char ^
}
答案 10 :(得分:1)
最短的方法是使用接头
var inputString = "abc";
// convert to array and remove 1 element at position 4 and save directly to the array itself
let result = inputString.split("").splice(3, 1).join();
console.log(result);
答案 11 :(得分:1)
创建如下功能
match
要替换,请提供如下字符
String.prototype.replaceAt = function (index, char) {
if(char=='')
{
return this.slice(0,index)+this.substr(index+1 + char.length);
}
else
{
return this.substr(0, index) + char + this.substr(index + char.length);
}
}
并要删除索引处的字符,请给第二个参数为空字符串
a.replaceAt(4,'');
答案 12 :(得分:0)
也许我是个菜鸟,但我今天遇到了这些,它们看起来都不必要地复杂。
这里有一个更简单的(对我来说)方法来从字符串中删除你想要的任何内容。
function removeForbiddenCharacters(input) {
let forbiddenChars = ['/', '?', '&','=','.','"']
for (let char of forbiddenChars){
input = input.split(char).join('');
}
return input
}
答案 13 :(得分:0)
如果您只想删除单个字符并 如果知道要删除的字符的索引,则可以使用以下功能:
/**
* Remove single character at particular index from string
* @param {*} index index of character you want to remove
* @param {*} str string from which character should be removed
*/
function removeCharAtIndex(index, str) {
return str.substring(0, index - 1) + str.substring(index, str.length)
}
答案 14 :(得分:0)
您可以使用以下命令:if ( str[4] === 'r' ) str = str.slice(0, 4) + str.slice(5)
说明:
if ( str[4] === 'r' )
检查第五个字符是否为'r'
str.slice(0, 4)
切片字符串以获取'r'
+ str.slice(5)
添加其余的字符串。
已缩小:s=s[4]=='r'?s.slice(0,4)+s.slice(5):s
[37个字节!]
演示:
function remove5thR (s) {
s=s[4]=='r'?s.slice(0,4)+s.slice(5):s;
console.log(s); // log output
}
remove5thR('crt/r2002_2') // > 'crt/2002_2'
remove5thR('crt|r2002_2') // > 'crt|2002_2'
remove5thR('rrrrr') // > 'rrrr'
remove5thR('RRRRR') // > 'RRRRR' (no change)
答案 15 :(得分:0)
这是simpleigh answer(省略长度)的改进
s.slice(0,4)+s.slice(5)
let s="crt/r2002_2";
let o= s.slice(0,4)+s.slice(5);
let delAtIdx= (s,i) => s.slice(0,i)+s.slice(i+1); // this function remove letter at index i
console.log(o);
console.log(delAtIdx(s,4));
答案 16 :(得分:0)
以下功能最适合我的情况:
public static cut(value: string, cutStart: number, cutEnd: number): string {
return value.substring(0, cutStart) + value.substring(cutEnd + 1, value.length);
}
答案 17 :(得分:0)
在C#(夏普)中,您可以将空字符设为'\ 0'。 也许你可以这样做:
String.prototype.replaceAt = function (index, char) {
return this.substr(0, index) + char + this.substr(index + char.length);
}
mystring.replaceAt(4, '\0')
在Google上搜索或在互联网上浏览并检查javascript是否允许您制作空字符,例如C#。如果是,那么学习如何去做,也许replaceAt函数最终会起作用,你就能达到你想要的效果!
最后,'r'字符将被删除!
答案 18 :(得分:0)
我不喜欢使用replace函数从字符串中删除字符。 这样做不合逻辑。通常我用C#(Sharp)编程,每当我想从字符串中删除字符时,我都使用String类的Remove方法,但是没有Replace方法,即使它存在,因为当我要删除时,我删除了,没有替代。 这是合乎逻辑的!
在Javascript中,字符串没有删除函数,但有substr函数。您可以使用substr函数一次或两次从字符串中删除字符。你可以使用以下函数来删除字符串末尾的起始索引处的字符,就像c#方法首先重载String.Remove(int startIndex):
function Remove(str, startIndex) {
return str.substr(0, startIndex);
}
和/或你也可以使用以下函数来删除start index和count处的字符,就像c#方法第二次重载一样String.Remove(int startIndex,int count):
function Remove(str, startIndex, count) {
return str.substr(0, startIndex) + str.substr(startIndex + count);
}
然后您可以使用这两个功能或其中一个来满足您的需求!
示例:强>
alert(Remove("crt/r2002_2", 4, 1));
输出:crt / 2002_2
通过使用无逻辑的技术实现目标可能会导致对代码理解和未来错误的混淆,如果您在大型项目中执行此操作很多!