Javascript 使用正则表达式以多种方式拆分单词
致力于类似Solr的东西,但不是Java 要将单词拆分为如下标记:Javascript 使用正则表达式以多种方式拆分单词,javascript,regex,plpgsql,plv8,Javascript,Regex,Plpgsql,Plv8,致力于类似Solr的东西,但不是Java 要将单词拆分为如下标记: P90X = P, 90, X (split on word/number boundary) TotallyCromulentWord = Totally, Cromulent, Word (split on lowercase/uppercase boundary) TransAM = Trans, AM 寻找一个通用的解决方案,而不是针对上述示例。最好是不支持
P90X = P, 90, X (split on word/number boundary)
TotallyCromulentWord = Totally, Cromulent, Word (split on lowercase/uppercase boundary)
TransAM = Trans, AM
寻找一个通用的解决方案,而不是针对上述示例。最好是不支持lookbehind的正则表达式风格,但如果需要,我可以使用PL/perl,它可以执行lookbehind
找到了一些答案,但他们似乎都使用了lookback
要拆分的内容:
我主要关心的是1和2 这不是我不想做的事情,但对于挑战,这里有一个javascript解决方案,您应该能够轻松地将其转换为任何语言:
function split(s) {
var match;
var result = [];
while (Boolean(match = s.match(/([A-Z]+|[A-Z]?[a-z]+|[0-9]+|([^a-zA-Z0-9])+)$/))) {
if (!match[2]) {
//don't return non alphanumeric tokens
result.unshift(match[1]);
}
s = s.substring(0, s.length - match[1].length);
}
return result;
}
:
此正则表达式应将段落或字符串中的所有单词拆分为标记。
在你的例子中,甚至对简单的情况也有效 全球匹配。另外,如果您想添加其他也可以添加的特定分隔符
# /(?:[A-Z]?[a-z]+(?=[A-Z\d]|[^a-zA-Z\d]|$)|[A-Z]+(?=[a-z\d]|[^a-zA-Z\d]|$)|\d+(?=[a-zA-Z]|[^a-zA-Z\d]|$))[^a-zA-Z\d]*|[^a-zA-Z\d]+/
(?:
[A-Z]? [a-z]+
(?= [A-Z\d] | [^a-zA-Z\d] | $ )
|
[A-Z]+
(?= [a-z\d] | [^a-zA-Z\d] | $ )
|
\d+
(?= [a-zA-Z] | [^a-zA-Z\d] | $ )
)
[^a-zA-Z\d]*
|
[^a-zA-Z\d]+
你能显示你的预期输出吗?不看你的链接,最好列出所有适用于连续字母分隔的规则。谢谢你告诉我们。祝你搜索好运。这个问题的一个主要问题是,你要的是一个可以做四件不同事情的正则表达式;并且可以在某种程度上区分ancronym(IBM)和简单的大写单词“TransAM”。这是一个广泛的问题空间。前3个问题可以在一个正则表达式中完成。最后一个(缩写)必须在之后完成,或者如果已知列表可用,则可以立即完成。
# /(?:[A-Z]?[a-z]+(?=[A-Z\d]|[^a-zA-Z\d]|$)|[A-Z]+(?=[a-z\d]|[^a-zA-Z\d]|$)|\d+(?=[a-zA-Z]|[^a-zA-Z\d]|$))[^a-zA-Z\d]*|[^a-zA-Z\d]+/
(?:
[A-Z]? [a-z]+
(?= [A-Z\d] | [^a-zA-Z\d] | $ )
|
[A-Z]+
(?= [a-z\d] | [^a-zA-Z\d] | $ )
|
\d+
(?= [a-zA-Z] | [^a-zA-Z\d] | $ )
)
[^a-zA-Z\d]*
|
[^a-zA-Z\d]+