我正在尝试将文字中的单词分开。我需要在它们之间用任何东西拆分它们,所以我写了一个正则表达式,它可以正常工作 。
单词是可以包含短划线( - )的字母字符串,它们不能以短划线开头或以短划线结束。除了单个破折号和[a-zA-Z]之外,单词不能包含数字或任何其他字符。
这是我到目前为止所提出的:
/(-[^a-zA-Z])|\w*\d\w*|[^a-zA-Z-]+/ig
然而,对于以破折号开头的单词,这种情况无法正常工作,例如:
123-word
那应该匹配
123-
非常感谢任何有关这方面的帮助,谢谢!
更新
对不起,我很模糊。我需要匹配单词之间的内容,而不是单词本身,所以我可以进一步分成数组。
到目前为止,这与上面的表达式匹配:
......这应该是这样的:
注意第二个文本行(123-)的匹配差异 很抱歉没有足够具体。
答案 0 :(得分:0)
您可以使用此正则表达式:
/(?<=[^\w-]|^)(?!-)([a-z-]+)(?<!-)(?=[^\w-]|$)/gi
给出如下输入:
abc-def word A -notword xyz notword-
上述正则表达式将匹配以下单词:
abc-def
word
A
xyz
更新:根据已修改的问题,您可以使用此正则表达式进行拆分:
/([^\w-].*?)(?=(?<=[^\w-]|^)(?!-)[a-z-]+(?<!-)(?=[^\w-]|$))/gis
答案 1 :(得分:0)
如果我理解你的问题。
我没有搜索有效的匹配项,而是替换了所有无效的匹配项。
看看这个Demo 它根据您的问题匹配所有无效匹配,我已理解。
“单词是可以包含短划线( - )的字母字符串,它们不能以破折号开头或以破折号结尾。除了单个破折号和[a-zA-Z]之外,单词不能包含数字或任何其他字符。” 强>
这是代码
var str = 'word word-ed, [word-ing] 123-word w-word, word-. w0rd w14rd 124eword 1234word finished.'
str.replace(/(\b[\d]+-[a-zA-Z]+\b)|(\b[\d]+[a-zA-Z]+)|(\b[a-zA-Z]+[\d]+[a-zA-Z]+)|(\b[a-zA-Z]+-[.,]|([\[\],.]))/g, '').split(/\s+/)
<强>输出强>
["word", "word-ed", "word-ing", "w-word", "finished"]
<强>解释强>
搜索无效匹配
str.match(/(\b[\d]+-[a-zA-Z]+\b)|(\b[\d]+[a-zA-Z]+)|(\b[a-zA-Z]+[\d]+[a-zA-Z]+)|(\b[a-zA-Z]+-[.,]|([\[\],.]))/g)
//output
[",", "[", "]", "123-word", ",", "word-.", "w0rd", "w14rd", "124eword", "1234word", "."]
替换为null
var temp = str.replace(/(\b[\d]+-[a-zA-Z]+\b)|(\b[\d]+[a-zA-Z]+)|(\b[a-zA-Z]+[\d]+[a-zA-Z]+)|(\b[a-zA-Z]+-[.,]|([\[\],.]))/g)
//output
"word word-ed word-ing w-word finished"
用空格分割结果
temp.split(/\s+/)
//output
["word", "word-ed", "word-ing", "w-word", "finished"]