我试图编写一个函数,在执行时将删除单词中的标点符号并将标记放在末尾。移除位工作正常,直到我附加了在末尾添加相同标记的部分;现在而不是删除punc。在字符串的内部,它留在那里并且将它添加到最后,这不是我想要的。我的代码如下:
function containsPunctuation(word) {
var new_word;
new_word = word.replace(".", "");
new_word = word.replace("!", "");
new_word = word.replace(";", "");
new_word = word.replace(",", "");
new_word = word.replace("?", "");
if (word.includes(".") === true) {
new_word = new_word + ".";
}
return new_word;
}
答案 0 :(得分:1)
您的代码有三个主要问题:
首次更换后,您必须在new_world
var new_word;
new_word = word.replace(".", "");
new_word = new_word.replace("!", "");
或更简单地说,您可以直接对接收的参数进行操作,而无需使用其他变量:
word = word.replace(".", "");
word = word.replace("!", "");
请记住,replace()
仅在第一次出现时替换。
如果不是您想要的行为,您可以使用此功能:
function StringReplace( str, fnd, rep ) {
return str.split(fnd).join(rep);
}
然后
word = StringReplace( word, ".", "");
/* ...and so on */
在开始替换之前必须检查字符串是否包含标点符号.
(并删除每个.
)所以在开头...
var addPunctuation;
addPunctuation = word.includes(".");
然后在函数返回之前:
if( addPunctuation ) {
word += '.';
}
function StringReplace( str, fnd, rep ) {
return str.split(fnd).join(rep);
}
function containsPunctuation(word) {
var addPunctuation;
addPunctuation = word.includes(".");
word = StringReplace(word, ".", "");
word = StringReplace(word, "!", "");
word = StringReplace(word, ";", "");
word = StringReplace(word, ",", "");
word = StringReplace(word, "?", "");
if( addPunctuation ) {
word += ".";
}
return word;
}
答案 1 :(得分:1)
为什么不使用正则表达式替换不需要的字符?
var string = 'a,b;c!d.e?f';
string = string.replace(/[.,;!?]/g, '') + '.';
console.log(string);
答案 2 :(得分:0)
在此处的代码中,行new_word = word.replace(".", "");
正在将字符串new_word替换为word中的预期值(不带。)
虽然变量词实际上并没有。删除,但只是你要设置的值,new_word。所以换的时候!来了,word.replace中的值字仍然包含。从第一次替换,因为它只用新词替换。所以这样的事情可以在你的场景中起作用,可以改进,但只是一个概念点。
function containsPunctuation(word) {
var new_word;
new_word = word.replace(".", "");
new_word = new_word.replace("!", "");
new_word = new_word.replace(";", "");
new_word = new_word.replace(",", "");
new_word = new_word.replace("?", "");
if (word.includes(".") === true) {
new_word = new_word + ".";
}
return new_word;
}