Регулярное выражение - соответствует всем, кроме первой буквы в каждом слове в предложении - PullRequest
4 голосов
/ 25 января 2011

Я почти получил ответ здесь, но я что-то упустил, и я надеюсь, что кто-то здесь может мне помочь.

Мне нужно регулярное выражение, которое будет соответствовать всем, кроме первой буквы в каждом словев предложении.Затем мне нужно заменить совпавшие буквы на правильное количество звездочек.Например, если у меня есть следующее предложение:

There is an enormous apple tree in my backyard.

Мне нужно получить такой результат:

T**** i* a* e******* a**** t*** i* m* b*******.

Мне удалось придумать выражение, которое почти делает это:

(?<=(\b[A-Za-z]))([a-z]+)

Используя приведенное выше предложение, это выражение дает мне:

T* i* a* e* a* t* i* m* b*.

Как получить правильное количество звездочек?

Спасибо.

Ответы [ 3 ]

8 голосов
/ 25 января 2011

Попробуйте это:

\B[a-z]

\B является противоположностью \b - это соответствует тому, где нет границы слова - когда мы видим букву, которая идет после другой буквы.

Ваше регулярное выражение заменяет весь хвост слова - [a-z]+ одиночными звездочками. Вы должны заменить их один за другим. Если вы хотите, чтобы это работало, вы должны сопоставить одну букву, но у проверки есть слово позади него (что немного бессмысленно, так как вы могли бы также проверить наличие одной буквы (?<=[A-Za-z])[a-z]):

(?<=\b[A-Za-z]+)[a-z]

(обратите внимание, что последнее регулярное выражение имеет вид сзади переменной длины, что не реализовано в большинстве разновидностей регулярных выражений)

0 голосов
/ 27 августа 2016

Это старый вопрос. Добавление ответа, так как другие, кажется, не решают эту проблему полностью или четко. Самое простое регулярное выражение, которое обрабатывает это /(\B[a-z])/g. Это добавляет «g» в качестве глобального флага, поэтому поиск по одному символу будет повторяться по всей строке.

string = "There is an enormous apple tree in my backyard."
answer = string.replace(/\B[a-z]/g, "*");

string = "There is an enormous apple tree in my backyard."
$("#stringDiv").text(string);

answer = string.replace(/\B[a-z]/g, "*");
$("#answerDiv").text(answer);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="stringDiv"></div>
<div id="answerDiv"></div>
0 голосов
/ 25 января 2011

Попробуйте это возможно:

(\w{1})\w*
...