我几乎得到了答案,但我错过了一些东西,我希望有人可以帮助我。
我需要一个正则表达式,它将匹配句子中每个单词的第一个字母。然后我需要用正确数量的星号替换匹配的字母。例如,如果我有以下句子:
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*.
如何获得正确数量的星号?
谢谢。
答案 0 :(得分:8)
试试这个:
\B[a-z]
\B
与\b
相反 - 它匹配没有字边界的地方 - 当我们看到一封字母在另一个字母后面时。
你的正则表达式用单个星号替换单词的整个尾部 - [a-z]+
。你应该逐个替换它们。如果你想要它可以工作,你应该匹配一个字母,但检查后面有一个字(这有点无意义,因为你也可以检查一个字母(?<=[A-Za-z])[a-z]
):
(?<=\b[A-Za-z]+)[a-z]
(请注意,最后一个正则表达式具有可变长度的lookbehind,这在大多数正则表达式中都没有实现)
答案 1 :(得分:0)
可能尝试这个:
(\w{1})\w*
答案 2 :(得分:0)
这是一个老问题。添加答案,因为其他人似乎没有完全或清楚地解决这个问题。处理此问题的最简单的正则表达式是/(\B[a-z])/g
。这增加了&#39;作为全局标志,因此单个字符搜索将在整个字符串中重复。
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);
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="stringDiv"></div>
<div id="answerDiv"></div>
&#13;