如何使用 JavaScript 替换字符串中的所有点

IT技术 javascript string replace
2021-01-28 01:26:45

我想替换.JavaScript 字符串中所有出现的点(

例如,我有:

var mystring = 'okay.this.is.a.string';

我想得到:okay this is a string

到目前为止,我尝试过:

mystring.replace(/./g,' ')

但这最终将所有字符串替换为空格。

6个回答

您需要转义 the.因为它在正则表达式中具有“任意字符”的含义。

mystring = mystring.replace(/\./g,' ')
@Kingalione 究竟什么不起作用?你能详细说明一下吗?
2021-03-12 01:26:45
只是为了澄清,\ 转义了正则表达式中的特殊字符,例如 . 在这种情况下
2021-03-22 01:26:45
@Webwoman 这就是g表达式末尾修饰符的用途。将其视为 (g) 全局。
2021-03-28 01:26:45
看起来像 sed .. 不知何故.. :)
2021-04-06 01:26:45
在 reagukar 表达中点。意味着所有,这是正确的解决方案!
2021-04-09 01:26:45

另一种易于理解的解决方案:)

var newstring = mystring.split('.').join(' ');
@Jasper 根据我的理解,它在大多数浏览器中实际上更快,尽管我实际上并没有对其进行基准测试。
2021-03-23 01:26:45
如果您使用 RegExp,您确实希望将正则表达式存储在循环外的单独变量中。编译/解释一个正则表达式需要一些时间,但是一旦编译完成,它就可以非常快速地使用。请试试我做的这些测试:jsperf.com/replace-vs-split-join-vs-replaceall/23
2021-03-23 01:26:45
这不是比正则表达式慢得多吗?
2021-03-25 01:26:45
@HaggleLad 因为你不需要弄乱正则表达式
2021-04-05 01:26:45
@BetoFrega 没有什么比一些经验数据更能说明您的情况了:)。感谢提供链接!
2021-04-09 01:26:45
/**
 * ReplaceAll by Fagner Brack (MIT Licensed)
 * Replaces all occurrences of a substring in a string
 */
String.prototype.replaceAll = function( token, newToken, ignoreCase ) {
    var _token;
    var str = this + "";
    var i = -1;

    if ( typeof token === "string" ) {

        if ( ignoreCase ) {

            _token = token.toLowerCase();

            while( (
                i = str.toLowerCase().indexOf(
                    _token, i >= 0 ? i + newToken.length : 0
                ) ) !== -1
            ) {
                str = str.substring( 0, i ) +
                    newToken +
                    str.substring( i + token.length );
            }

        } else {
            return this.split( token ).join( newToken );
        }

    }
return str;
};

alert('okay.this.is.a.string'.replaceAll('.', ' '));

比使用正则表达式更快...

编辑:
也许在我做这段代码的时候我没有使用 jsperf。但最终这样的讨论完全没有意义,性能差异不值得现实世界中代码的易读性,所以我的回答仍然有效,即使性能与正则表达式方法不同。

EDIT2:
我创建了一个库,允许您使用流畅的界面执行此操作:

replace('.').from('okay.this.is.a.string').with(' ');

请参阅https://github.com/FagnerMartinsBrack/str-replace

你说的“流氓角色”是什么意思?
2021-03-18 01:26:45
很有用。仅供参考:警报语句中的分号后有流氓字符。
2021-03-20 01:26:45
他的意思是实体​ 两次,这是 Unicode 字符“零宽度空间”(U+200B)。有关fileformat.info/info/unicode/char/200b/index.htm 的更多信息
2021-04-03 01:26:45
@FagnerBrackstr.toLowerCase()出于性能原因,您可能应该将其移出循环。此外,操作您正在搜索的字符串可能不是最佳的。我发布了一个修改版本的答案:stackoverflow.com/questions/2390789/...
2021-04-07 01:26:45
@sstur我想在操作后需要再次小写字符串。操作我正在搜索的字符串是否在性能上有相当大的差异?我想易读性超过了好处(未经测试)。
2021-04-07 01:26:45
str.replace(new RegExp(".","gm")," ")
非常适合替换功能 =)
2021-04-07 01:26:45

对于这个简单的场景,我还建议使用 javascript 中内置的方法。

你可以试试这个:

"okay.this.is.a.string".split(".").join("")

问候