【问题标题】:Equivalent Regex Unsupported lookbehind assertion IOS Safari等效的 Regex 不支持的后向断言 IOS Safari
【发布时间】:2021-02-01 04:57:13
【问题描述】:

这个正则表达式:

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 ((?&lt;= ) and (?&lt;! )) 不受支持而在 IOS Safari 上中断。是否有可以使用的用于句子标记化的等效(或类似)正则表达式?最好不要因为此处引用的其他 iOS Safari 兼容性问题而中断:(https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp#assertions) ECMAScript (ECMA-262) 该规范中“RegExp”的定义。

【问题讨论】:

  • 请发布您的正则表达式和有问题的示例,而不是链接
  • @anubhava 当然!
  • 可以是任何一个或多个句子的段落字符串,不管怎样我都会发一个例子。
  • 你能在 Safari 中试试这个正则表达式吗:/(?:\s|^)(?:["'‘“'"\[({⟨].*?[.?!](?:\s[.?!])*["'’”'"\])}⟩]|\S.*?[.?!](?:\s[.?!])*)(?=\s|$)/gm
  • @Moderators 关闭了这个问题,它不是重复的,它只是按类别相关。我要问的很具体,其他帖子没有答案。

标签: javascript ios regex lookbehind


【解决方案1】:

这是您的正则表达式的一个版本,您可以在不使用任何后向断言将输入分解成句子的情况下使用它:

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

RegEx Demo

请记住,您的正则表达式可能会在以点结尾的单词(例如 Jr., Sr. Mr. 等)以及其他类似情况的句子中中断。

【讨论】:

  • 不错,但我添加了另一个更好的示例文本。可以添加对 Mr. Mrs. Jr. 的支持吗?
  • 正如我所说,您的原始正则表达式本身不适用于Mr.Sr. 等,不幸的是,没有后视就没有强大的解决方案。
  • 哦,好的,我会寻找更强大的东西。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-04
  • 1970-01-01
  • 2011-08-09
  • 1970-01-01
相关资源
最近更新 更多