2015-09-29 4 views
0

Я хочу разделить текст по регулярному выражению между символом «@» и списком символов ([,.!? {}]). Пример: у меня есть следующий текстКак разбить строку на регулярное выражение

@test, @ {@ test2, dasdas. @ test3?} @ test4? @ Test5!

и я хочу, чтобы получить следующий массив:

  1. тест
  2. test2
  3. test3
  4. test4
  5. test5

Я пытаюсь использовать следующее регулярное выражение

/@ (. *?) [{}!?.]/

но вернуть неправильный массив.
Не мог бы кто-нибудь мне помочь?

+0

Попробуйте https://regex101.com/ или аналогичный инструмент, это очень полезно при отладке регулярного выражения. – Ian

+0

Пожалуйста, введите код. Это JS? –

+0

Нет, это Java с методом разделения строк –

ответ

2

Все, что вам нужно, чтобы соответствовать @, а затем сопоставить и захватить 1 или более алфавитно-цифровых символов с \w+:

@(\w+) 

См regex demo

Результаты:

test 
test2 
test3 
test4 
test5 

В Java, вы можете просто матч подстрок:

String s = "@test, @{@test2, dasdas. @test3?} @test4? @test5!"; 
Pattern pattern = Pattern.compile("@(\\w+)"); 
Matcher matcher = pattern.matcher(s); 
while (matcher.find()){ 
    System.out.println(matcher.group(1)); 
} 

IDEONE demo См (или another demo с результатами, хранящихся в массиве).

+1

Спасибо. Это работа –

0

Если это JavaScript, то следующие работы.

string1 = "@test, @ {@ test2, dasdas. @ Test3?} @ Test4? @ Test5!";

array1 = string1.split ("@");/* Array ["", "test", "{", "test2, dasdas.", "Test3?}", "Test4?", "Test5!" ] */

0

Вы можете использовать что-то подобное в Javascript:

var re = /@([^,.!?{}@]+)/g; 
var str = '@test, @{@test2, dasdas. @test3?} @test4? @test5!'; 
var m; 
var arr; 

while ((m = re.exec(str)) !== null) { 
    if (m.index === re.lastIndex) 
     re.lastIndex++; 

    arr.push(m[1]); 
} 

console.log(arr); 
//=> ["test", "test2", "test3", "test4", "test5"] 

RegEx Demo

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