我知道正则表达式
(?<!\w)(?=\w)|(?<=\w)(?!\w)
相当于
\b
但似乎在javascript(在我的情况下是打字稿)?&gt;和?&lt;不支持积极和消极的观察。
如果不使用lookbehind,这个表达式的等价物是什么?
只是为了解释问题的背景。我必须在一个句子中分开单词。 \ b效果很好,但它并不关心重音字符,所以
\b
等于
(?<!\w)(?=\w)|(?<=\w)(?!\w)
和
\w
等于
[A-Za-z0-9]
转动
\b
in
(?<![A-Za-z0-9À-ÿ])(?=[A-Za-z0-9À-ÿ])|(?<=[A-Za-z0-9À-ÿ])(?![A-Za-z0-9À-ÿ])
完全符合应有的。正则表达式很好,但javascript不支持lookbehind,所以不太可能使用。
编辑:它不是一个笨蛋,而是一个解决方法,所以我把它留在这里只是为了适合那些适合“肮脏”的人。解。 让我们说你有一个句子(一个字符串)来打破它的组成部分和\ b它是对你的,但不适用于变音符号(如重音字母)。有可能解决问题,使用提供的函数here从字符串中删除变音符号,然后像往常一样使用\ b,然后重建包含diacritis的分解字符串,解析原始字符串并返回另一个使用的字符串数组构建你打破删除变音符号字符串得到的单词索引。这是在typescript 中的实现splitSentenceInWords(sentenceToSplit){
var splitInWordsNoDiacritis: string[];
var splitInWordsWithDiacritics: string[];
var i:number;
var counterBegin: number;
var counterEnd: number;
splitInWordsNoDiacritis=[];
splitInWordsWithDiacritics=[];
splitInWordsNoDiacritis=this.removeDiacritics(sentenceToSplit).split(/\b/g);
counterBegin=0;
counterEnd=0;
for (i = 0; i < splitInWordsNoDiacritis.length; i++) {
counterEnd=splitInWordsNoDiacritis[i].length+counterBegin;
splitInWordsWithDiacritics[i]=sentenceToSplit.substring(counterBegin, counterEnd);
counterBegin=counterEnd;
}
return splitInWordsWithDiacritics;
}