![](/img/trans.png)
[英]How to build a custom regex that matches dashes/alphanumeric characters and '.' dot characters that are not consecutive?
[英]RegEx consecutive matches
我在Javascript中使用此正则表达式来删除3个字母以下的单词:
srcText = srcText.replace(/\s[a-z]{1,3}\s/gi,'');
它可以工作,但是当找到两个连续的匹配项时,第二个不受影响:
例:
“ ...这是文本的一个示例...”
除非我再运行一次代码,否则“ one”和“ a”不会受到影响:
srcText = srcText.replace(/\s[a-z]{1,3}\s/gi,'');
因此,我必须将代码运行n次, n是srcText中的连续匹配项。
用于测试目的:
示范文本:
http://www.gutenberg.org/files/521/521-0.txt (例如,第4段)
我的正则表达式是否缺少某些东西或javascript不允许这种递归?
JavaScript的正则表达式(以及大多数其他正则表达式)支持\\b
转义序列,该序列匹配(零宽度)单词边界。 在您的表达式中,只需用\\b
替换两个\\s
。
请注意,“单词边界”也适用于破折号,点等。因此, this-test - more.
在以下位置将具有边界: |this|-|test| - |more|.
|this|-|test| - |more|.
通常这是可取的,但是与\\s
行为差异是值得了解的。
正如Sam在评论中指出的,单词边界标识为:
(^\w|\w\W|\W\w|\w$)
即,以字符串开头和结尾作为非单词字符的非单词字符后接单词字符,或单词字符后接非单词字符。 (但请注意\\b
为零宽度,因此它不仅仅是该表达式的简写形式)
正则表达式失败,因为您需要每个单词之间有一个空格,并且正则表达式搜索不重叠。 正则表达式实际上开始寻找一个空格,一个1-3个字母的单词,然后是另一个空格。 它确定的第一个在is
。 由于空间之后is
采取了由第一场比赛, one
不能匹配,因为它没有前包含空格。 正则表达式匹配如下:
......这is
一个样本of
文本...
解决此问题的一种简单方法是将\\s
更改为\\b
。 \\b
查找包含空格但不包含实际字符的单词中断。 因此,正则表达式\\b[az]{1,3}\\b
将像这样匹配:
......这is
one
样本of
a
文本...
现在可以找到所有三个字母单词,可以像这样用来替换所有单词:
> var str = "... this is one sample of a text ... ";
> `srcText = srcText.replace(/\b[a-z]{1,3}\b/gi,'');`
"... this sample text ... "
这包括已删除单词的多余空格。 如果要删除这些空格并确定没有多余的间距,请继续使用与after
但不匹配的间距匹配的东西。 这样,由于存在单词,将删除等量的空格。 正则表达式如下所示: \\b[az]{1,3}\\s
如果您需要更复杂的东西,请告诉我。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.