2015-11-14 5 views
3

Мне нужно регулярное выражение, чтобы добавить звездочку (*) в начале и в конце слова или группы слов, кроме номеров, которые остались одни. Любое число, у которого есть письмо рядом с ним, в порядке. Это трудно объяснить, но здесь у нас есть несколько примеров:Regex: Как разбить и заменить строку, содержащую числа?

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

[email protected] Place 123 Block N2 45 --> *[email protected] Place* 123 *Block N2* 45 

123 [email protected]# abc    --> 123 *[email protected]# abc* 

Я попытался с:

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

, но он не работает. Надеюсь, кто-то может мне помочь.

+0

Как работает 'N2'? – EagerToLearn

+0

Любое слово или группа слов, являются действительными примерами, чтобы добавить звездочку, например: N2, Это тест, это тест # 01, абв123 Это пример слова или группы слов, введите числа или символы, которые мне нужно добавить звездочку в начале и в конце матча, за исключением номеров, которые остались одни –

ответ

4

Вот пример, который работает:

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

Замещение строка просто

*$1* 

Here's a demo.

примеры работают так:

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

[email protected] Place 123 Block N2 45 
--> *[email protected] Place* 123 *Block N2* 45 

123 [email protected]# abc 
--> 123 *[email protected]# abc* 

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

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

Объяснение

Мы хотим, чтобы соответствовать целые слова или группы слов, но исключить слова, которые сделаны полностью из цифр. Так что ...

  • ( начало захвата
    • (?!\d+\b) не совпадают слово целиком из чисел
    • \S потребует без пробела (поэтому мы не совпадают, как * def* в abc 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>

+0

Большое спасибо Ed! Это было почти то, что мне нужно! Он не работает только в следующих случаях: @ rmani empory 123 // exp result: \ * @ rmani empory \ * 123 # 1smple 22 # sample2 # xyz1 // exp result: \ * # 1smple \ * 22 \ * # sample2 # xyz1 \ * –

+0

Я очень ценю вашу помощь –

+0

Я забыл добавить случай специальных символов в начале слова или группы слов в моем первоначальном вопросе, извините, я надеюсь, что вы можете мне помочь, потому что я действительно сосать в регулярных выражениях –

Смежные вопросы