javascript - 正则表达式:如何拆分和替换包含数字的字符串?

标签 javascript regex replace split

我需要一个正则表达式来在单词或单词组的开头和结尾添加星号 (*),单独的数字除外。任何旁边有字母的数字都可以。这很难解释,但这里我们有一些例子:

123 Ballister 1 Block           --> 123 *Ballister* 1 *Block*

B@llister Place 123 Block N2 45 --> *B@llister Place* 123 *Block N2* 45

123 B@llister# abc              --> 123 *B@llister# abc*

我试过:

var sample = "@sample 22 @sample2 xyz1";
var x = sample.replace(/[^0-9 ]+/g, function(str) {
    return "*"+str.trim()+"*";
});

但它不起作用。我希望有人能帮助我。

最佳答案

这是一个有效的例子:

/((?!\d+\b)\S(?:\S| \D)*)/

替换字符串就是

*$1*

Here's a demo .

示例是这样工作的:

123 Ballister 1 Block
--> 123 *Ballister* 1 *Block*

B@llister Place 123 Block N2 45
--> *B@llister Place* 123 *Block N2* 45

123 B@llister# abc
--> 123 *B@llister# abc*

@rmani empory 123
--> *@rmani empory* 123

#1smple 22 #sample2 #xyz1
--> *#1smple* 22 *#sample2 #xyz1*

说明

我们想要匹配整个单词或单词组,但排除完全由数字组成的单词。所以……

  • ( 开始捕捉
    • (?!\d+\b) 不匹配整个数字
    • \S 需要一个非空格字符(因此我们不会像 abc def 中的 * def* 那样匹配)
    • (?:\S|\D) 一个非空格字符或一个空格和一个非数字
    • * 零次或多次
  • )停止捕获

将它们放在一起

您可以按如下方式使用它:

var sample = "@sample 22 @sample2 xyz1";
var x = sample.replace(/((?!\d+\b)\S(?:\S| \D)*)/g, '*$1*');

现场演示:

var input = document.getElementsByTagName('input')[0],
        output = document.getElementsByTagName('span')[0];

input.onkeyup = function (elem) {
    output.innerHTML = input.value.replace(/((?!\d+\b)\S(?:\S| \D)*)/g, '*$1*');
};
<p>
    Original Text: <input />
</p>
<p>
    Replacement: <span />
</p>

关于javascript - 正则表达式:如何拆分和替换包含数字的字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33705543/

相关文章:

javascript - 使用 jQuery 查找和替换 HTML 字符串

ubuntu - 将一种模式的出现更改为另一种模式

JavaScript attr ('id' )和这个

javascript - 如果我将 github 存储库移至另一个用户,这对 npm 上的包有何影响

javascript - angularjs函数的调用顺序是什么(config/run/controller)?

javascript - json 解析 - 取消转义引号

regex - ant 替换正则表达式 xml 换行符

Javascript 没有按照我期望的方式调用我的 PHP

regex - Nginx 正则表达式和位置通配符

Java用未知索引替换arraylist中的对象