2015-04-30 5 views
0

Я хочу, чтобы мой Regex игнорировать строку, если она содержит два * с вместо одного *:Regex не захватывают символы

**hello** 
*hello* 

Мой Regex захватывает два *hello* с. Как я могу только захватить *hello*, а не **hello**? Вот мой текущий Regex:

\*{1}?[^\*|\s]{1,}?\*{1}? 

Edit: То, что я пытаюсь сделать:
я делаю расширение Chrome, который превращает *hello* в привет и превращает **hello** в привет. Однако, поскольку Regex делает перекрытие **hello** с *hello*, он превращает выделенную курсивом выделенную курсивом. Как я могу это остановить?

+0

Как насчет '** hello *' и '* hello **'? – Oriol

+0

Это не проблема. Я могу с ними справиться. Они не ошибаются.
Billy

+0

Но что должно быть захвачено? 'hi * hello *'? – dman2306

ответ

2

Ключ при этом должен заменить \*\*([^*]*)\*\* с <b>\1</b>, а затем заменить \*([^*]*)\* с <i>\1</i>, или сильный/эм, стили CSS, все, что вы на самом деле с помощью изменения шрифта.

Для покрытия я в вложено в смелых тегах, (обратный не является проблемой), вы можете использовать это для boldifying регулярного выражения: \*\*([^*]*(\*[^*]*\*[^*]*))\*\*

+1

По существу, сначала сопоставляем все конкретные выражения и сохраняем самый общий (который соответствует более чем одной строке) как последний. –

+0

Я надеялся на немного большую эффективность с регулярным выражением, но я просто соглашусь с этим. Я действительно думал об этом, но это точно не то, что я хотел. – Billy

0

Вы можете использовать следующее:

[^*]\*([^\*\s]+)\*($|[^*]) 

Посмотреть DEMO

+0

Так близко! Я хотел бы, чтобы '* hello *' между двумя «h» s соответствовал. https://regex101.com/r/tC0lJ0/2 – Billy

+0

@Binks проверяет обновленное регулярное выражение и демонстрацию :) –

0

Вам не нужно регулярное выражение для «если оно содержит»; Попробуйте следующее:

var contains = "**hello**".indexOf("**")>=0; 
// 'contains' is true if '**' exists in the string. 
Смежные вопросы