等效正则表达式不支持lookbehind断言IOS Safari

问题描述 投票:0回答:2

这个正则表达式:

var text = "Mr. Smith bought cheapsite.com for 1.5 million dollars, i.e. he paid a lot for it. Did he mind? Adam Jones Jr. thinks he didn't. In any case, this isn't true... Well, with a probability of .9 it isn't."
// break string up in to sentences based on punctation and quotation marks
var tokens = text.match(/(?<=\s+|^)[\"\'\‘\“\'\"\[\(\{\⟨](.*?[.?!])(\s[.?!])*[\"\'\’\”\'\"\]\)\}\⟩](?=\s+|$)|(?<=\s+|^)\S(.*?[.?!])(\s[.?!])*(?=\s+|$)/g);
由于不支持

lookbehind assertions ((?<= ) and (?<! ))

在 IOS Safari 上会中断。我可以使用用于句子标记化的等效(或类似)正则表达式吗?最好它不应该因为这里引用的其他 iOS safari 兼容性问题而中断:(https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp#assertions) ECMAScript (ECMA-262) 该规范中“RegExp”的定义。

javascript ios regex lookbehind
2个回答
0
投票

这是正则表达式的一个版本,您可以使用它,而无需使用任何后行断言将输入分解为句子:

/(?:\s|^)(?:["'‘“'"\[({⟨].*?[.?!](?:\s[.?!])*["'’”'"\])}⟩]|\S.*?[.?!](?:\s[.?!])*)(?=\s|$)/gm

正则表达式演示

请记住,您的正则表达式可能会在句子中出现以点结尾的单词(例如

Jr., Sr. Mr.
等)以及类似的情况时中断。


-1
投票

问题在

?<=
。如果你以某种方式替换它们,就我而言
?!
,可能没问题。

© www.soinside.com 2019 - 2024. All rights reserved.