我正在尝试使用正则表达式以便仅从句子中提取前30个字符以内的一次。一些用例可能是一个超过30个字符的单词,所以我想将其分为两个输出。
简单的例子:
Verwaltungsgesetze
输出应为
Verwaltungsgesetze
另一个简单的方法:
Gesetze des Landes Berlin
输出应为:
Gesetze des Landes Berlin
更复杂的一个:
Deutsche Gesellschaftsgeschichte
我希望将输出分成两个结果
1. Deutsche
2. Gesellschaftsgeschichte
原因是因为“ Deutsche Gesellschaftsgeschichte”一词总共为33个字符,但在30个字符后再将其切掉是没有意义的,因此将其分为两个部分更有意义。
我用它来查找最多30个字符,但我不知道如何支持我描述的最后一种情况。
^(?=.{1,30}$)[A-Za-z0-9]+(?:\s[A-Za-z0-9]+)?$
谢谢。
答案 0 :(得分:0)
简单的方法是从头开始看这个问题:您想将空格或字符串的末尾作为正则表达式的最后一项来匹配。在此之前,需要有一个字符串的开头或最后一个匹配项停止的地方,且最多30个字符之间。
((^|\G).{0,30})( |$)
这将匹配输入数据,如下所示:
Verwaltungsgesetze
^
Gesetze des Landes Berlin
^
Deutsche Gesellschaftsgeschichte
^
Donaudampfschiffahrtskapitänspatent
(no match)
对于单词长度超过30个字符的特殊情况,您将根本找不到匹配项。
答案 1 :(得分:0)
您可以按照我的示例获取文本:
let str_input = `Deutsche Gesellschaftsgeschichte
Gesetze des Landes Berlin
Gesetze des Landes Berlinxxxxxx`;
let arr_input = str_input.split("\n");
let regex = /(?=^.{31,}$)(\w+)\s([\w ]+)|(?=^.{1,30}$)([\w ]+)/;
for(let i=0; i<arr_input.length; i++){
let temp_str = arr_input[i];
temp_str.replace(regex, function(match,text1,text2){
if(text2){
console.log(`Case 2: Text is over 30 character. \nContent1=${text1} \nContent2=${text2}`);
}else{
console.log(`Case 1: Text is in 30 character. Content=${match}`);
}
});
}
在regex101中查看详细信息:https://regex101.com/r/ydjwB6/1