1

我尝试使用以下代码删除 | 站和终端总线的符号它不起作用。

"|aabckdoio|".replace("/^\|/g","").replace("/\|$/","")
4

3 回答 3

4

如果您从正则表达式中删除双引号,它将起作用。

如果您将字符串传递给.replace()它,它将执行正常的字符串搜索和替换,而不是正则表达式搜索。

您还可以将这两种.replace操作结合​​起来:

"|aabckdoio|".replace(/^\||\|$/g, "");

此外,如果您确定|字符将始终存在,您可以完全不使用正则表达式:

"|aabckdoio|".slice(1, -1)
于 2013-06-13T11:05:40.237 回答
2

如果您只需要删除第一个和最后一个字符,您可以使用:

var str = "|aabckdoio|".slice(1, -1); 
str; // "aabckdoio"
于 2013-06-13T11:09:06.483 回答
1

这是一个可能的解决方案,无需使用正则表达式。使用String.indexOfString.lastIndexOfString.slice(可以使用带有稍微修改索引的String.substringend),但如果它们匹配给定的参数,它只会删除开始或结束字符。参数中的错误是安静的(除了nullor undefined),您可能希望它们嘈杂,如果是这样,那么只需更改检查以适合您的风格/项目。

Javascript

var testString1 = "|aabckdoio|",
    testString2 = "*|aabckdoio|*";

function trimChars(string, startCharacters /*, endCharacters */ ) {
    string = {}.valueOf.call(string).toString();
    startCharacters  = {}.valueOf.call(startCharacters).toString();

    var start = 0,
        end = string.length,
        startCharactersLength = startCharacters.length,
        endCharacters = startCharacters,
        endCharactersLength = startCharactersLength;

    if (arguments.length > 2) {
        endCharacters = {}.valueOf.call(arguments[2]).toString();
        endCharactersLength = endCharacters.length;
    }

    if (string.indexOf(startCharacters) === 0) {
        start = startCharactersLength;
    }

    if (string.lastIndexOf(endCharacters) === end - endCharactersLength) {
        end -= endCharactersLength;
    }

    return string.slice(start, end);
}

console.log(trimChars(testString1, "|"));
console.log(trimChars(testString2, "*|", "|*"));

输出

aabckdoio
aabckdoio 

jsfiddle 上

于 2013-06-13T11:19:08.313 回答