簡體   English   中英

正則表達式:如何拆分和替換包含數字的字符串?

[英]Regex: How to split and replace a string that contains numbers?

我需要一個正則表達式在一個單詞或一組單詞的開頭和結尾添加一個星號( * ),除了單獨的數字。 任何旁邊都有字母的數字都可以。 這很難解釋,但這里我們有一些例子:

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*

這是一個演示

這些例子的工作方式如下:

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> 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM