我试图在5个字符后的第一个软连字符处切一个单词,包括连字符:

这是我想出的:

new RegExp("^(.{5}[^\u00AD]+)\u00AD")


它几乎可以工作,但是在字符串的开头增加了一个额外的削减:

un­-con­-ven­-tion-­al.
[ '', 'un­con', 'ven­tion­al.' ]
sev­en-­teen-year-old
[ '', 'sev­en', 'teen-year-old' ]


我想要的是:

['un­con', 'ven­tion­al.' ]


有时它也不能这样工作。

com­-pa­ny-en­-cou-r­aged
[ '', 'com', 'pa­ny-en­cour­aged' ]
Rev-­o­lu-­tion-­ar­ies,”
[ '', 'Rev', 'o­lu­tion­ar­ies,”' ]


应该

['compa­ny''en­cour­aged' ]
['Revo­lu","­tion­ar­ies,”' ]


基本上,转到第5个字符,继续直到找到连字符,然后将其切开。

这是我的用法:

console.log(hyphened);
console.log(hyphened.split(new RegExp("^(.{6}[^\u00AD]+)\u00AD")));

最佳答案

您可以使用



var strs = ["un\xADcon\xADven\xADtion\xADal.","seven\xADteen\xADyear\xADold","com\xADpany\xADen\xADcou\xADraged","Rev\xADolu\xADtion\xADaries"]
for (var i=0; i<strs.length; i++) {
  var match = strs[i].match(/^([\s\S]{5}[^\u00AD]*)\u00AD([\s\S]*)/);
  if (match) {
    console.log(strs[i], "=>", match[1].replace(/\xAD/g, '-'), ",", match[2].replace(/\xAD/g, '-'));
  }
}





模式匹配:


^-字符串开始
([\s\S]{5}[^\u00AD]*)-组1:软连字符以外的任意5个字符,然后是0+个字符
\u00AD-软连字符
([\s\S]*)-组2:任意0个以上的字符。

10-06 07:59