我在Javascript中使用此正则表达式删除3个字母或更少的字词:
srcText = srcText.replace(/\s[a-z]{1,3}\s/gi,'');
Run Code Online (Sandbox Code Playgroud)
它可以工作但是当找到两个连续匹配时,第二个不受影响:
例:
"......这是一个文本样本......"
除非我再次运行代码,否则'one'和'a'不会受到影响:
srcText = srcText.replace(/\s[a-z]{1,3}\s/gi,'');
Run Code Online (Sandbox Code Playgroud)
所以我必须运行代码n次,n是srcText中的连续匹配.
用于测试目的:
示范文本:
http://www.gutenberg.org/files/521/521-0.txt(比方说,第4段)
我的正则表达式遗漏了什么或javascript不允许这种递归?
JavaScript的正则表达式(以及大多数其他表达式)支持\b转义序列,它匹配(零宽度)字边界.在你的表情,只需更换这两个\s与\b,它会工作.
请注意,"单词边界"也适用于破折号,点等.因此this-test - more.将具有边界:|this|-|test| - |more|.通常这是可取的,但它\s是值得了解的行为差异.
正如Sam在评论中所指出的,单词边界被识别为:
(^\w|\w\W|\W\w|\w$)
Run Code Online (Sandbox Code Playgroud)
也就是说,一个非单词字符后跟一个单词字符,或一个单词字符后跟一个非单词字符,其中字符串的开头和结尾被视为非单词字符.(但请注意,它\b是零宽度,因此它不仅仅是该表达式的简写)
| 归档时间: |
|
| 查看次数: |
160 次 |
| 最近记录: |