我试图通过两个规则分割文本:
aaaaawww
分为aaaaa-
和www
)我创建了可以检测到此规则(https://regex101.com/r/fyskB3/2)的正则表达式,但不了解如何使这两个规则在(text.split(/REGEX/
)中起作用
当前正则表达式-(([\s]+)|(\w{5})(?=\w))
例如,初始文本为hello i am markopollo
,结果应类似于['hello', 'i', 'am', 'marko-', 'pollo']
答案 0 :(得分:1)
使用.match
可能会更容易:最多匹配5个非空格字符:
const str = 'wqerweirj ioqwejr qiwejrio jqoiwejr qwer qwer';
console.log(
str.match(/[^ ]{1,5}/g)
)
答案 1 :(得分:1)
我的方法是在分割之前处理字符串(我是RegEx的忠实粉丝):
1-搜索all the 5 consecutive non-last characters并将其替换为\1-
。
模式(\w{5}\B)
可以解决问题,\w{5}
将匹配5个完全相同的字符,而\B
将仅在最后一个字符不是单词的结尾字符时匹配。
2-用空格分隔字符串。
var text = "hello123467891234 i am markopollo";
var regex = /(\w{5}\B)/g;
var processedText = text.replace(regex, "$1- ");
var result = processedText.split(" ");
console.log(result)
希望有帮助!
答案 2 :(得分:0)
类似的事情应该起作用:
const str = "hello i am markopollo";
const words = str.split(/\s+/);
const CHUNK_SIZE=5;
const out = [];
for(const word of words) {
if(word.length > CHUNK_SIZE) {
let chunks = chunkSubstr(word,CHUNK_SIZE);
let last = chunks.pop();
out.push(...chunks.map(c => c + '-'),last);
} else {
out.push(word);
}
}
console.log(out);
// credit: https://stackoverflow.com/a/29202760/65387
function chunkSubstr(str, size) {
const numChunks = Math.ceil(str.length / size)
const chunks = new Array(numChunks)
for (let i = 0, o = 0; i < numChunks; ++i, o += size) {
chunks[i] = str.substr(o, size)
}
return chunks
}
,即,首先将字符串分成空格中的单词,然后找到长度超过5个字符的单词并将其“块化”。我弹出最后一个块,以避免在其中添加-
,但是如果您修补chunkSubstr
,则可能会有更有效的方法。
regex.split不能很好地工作,因为它将基本上从输出中删除那些项目。在您的情况下,您似乎要删除空格,但要保留字,因此将两个字分割都不会起作用。
答案 3 :(得分:0)
使用@CertainPerformance = [^\s]{1,5}
的正则表达式,然后应用regex.exec,最后循环所有匹配以达到目标。
就像下面的演示一样:
const str = 'wqerweirj ioqwejr qiwejrio jqoiwejr qwer qwer'
let regex1 = RegExp('[^ ]{1,5}', 'g')
function customSplit(targetString, regexExpress) {
let result = []
let matchItem = null
while ((matchItem = regexExpress.exec(targetString)) !== null) {
result.push(
matchItem[0] + (
matchItem[0].length === 5 && targetString[regexExpress.lastIndex] && targetString[regexExpress.lastIndex] !== ' '
? '-' : '')
)
}
return result
}
console.log(customSplit(str, regex1))
console.log(customSplit('hello i am markopollo', regex1))