【问题标题】:Regex: How to split and replace a string that contains numbers?正则表达式:如何拆分和替换包含数字的字符串?
【发布时间】:2016-02-15 18:57:57
【问题描述】:

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

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()+"*";
});

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

【问题讨论】:

  • N2 为何有效?
  • 任何单词或单词组都是添加星号的有效示例,例如:N2, This is a test, This is a test #01, abc123 这些是单词或单词组的示例包括我需要在匹配的开头和结尾添加星号的数字或字符,不包括单独的数字

标签: javascript regex replace split


【解决方案1】:

这是一个有效的例子:

/((?!\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>

【讨论】:

  • 非常感谢埃德!这几乎是我所需要的!它仅在以下情况下失败:@rmani empory 123 // exp 结果:*@rmani empory* 123 #1smple 22 #sample2 #xyz1 // exp 结果:*#1smple* 22 *#sample2 #xyz1*
  • 非常感谢您的帮助
  • 我原来的问题忘记在一个单词或一组单词的开头添加特殊字符的大小写,对不起,我希望你能帮助我,因为我真的很讨厌正则表达式
  • 我处理了@-at-the-beginning 问题,如下所示: ((@|)\b(?!\b\d+\b)\S(?:\S | \D)*) 并且在修订后的答案中也作为编辑
  • @StefanDochow 您可以编辑代码。使用 cmets 发布 cmets;不要更改帖子。
猜你喜欢
  • 1970-01-01
  • 2019-01-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-07
相关资源
最近更新 更多