Javascript 如何使这个句子拆分器与regex safari兼容?

Javascript 如何使这个句子拆分器与regex safari兼容?,javascript,regex,Javascript,Regex,我正在使用在本文中被接受为答案的正则表达式来拆分句子,但是正则表达式在safari中不兼容,因为它不支持负面lookbehinds(现在) 它基本上是一个从字符串中提取句子的程序 有关如何使其与safari兼容的任何想法?可以重新编写此正则表达式,以便在match/matchAll或exec中使用: /((?:[A-Z][A-Z]\.\w\.\w[\w\w].[\w\w])*?[.!?])(?:\s+$)/g 看。详情: ((?:[A-Z][A-Z]\.\w\.\w[\w\w].[\w\w]

我正在使用在本文中被接受为答案的正则表达式来拆分句子,但是正则表达式在safari中不兼容,因为它不支持负面lookbehinds(现在)

它基本上是一个从字符串中提取句子的程序


有关如何使其与safari兼容的任何想法?

可以重新编写此正则表达式,以便在
match
/
matchAll
exec
中使用:

/((?:[A-Z][A-Z]\.\w\.\w[\w\w].[\w\w])*?[.!?])(?:\s+$)/g
看。详情:

  • ((?:[A-Z][A-Z]\.\w\.\w[\w\w].[\w\w])*?[.!?])
    -第1组:
    • (?:[A-Z][A-Z]\.\w\.\w[\w\w]|[\w\w])*?
      -零次或多次出现
      • [A-Z][A-Z]\.
        -一个大写字母、小写字母,然后是一个
        ,或者
      • \w\.\w[\w\w]|
        -一个单词字符、
        、单词字符,然后是任意一个字符
      • [\w\w]
        -任何单个字符
    • [.!?]
      -a
  • (?:\s+|$)
    -一个或多个空格或字符串结尾
请参见JavaScript演示:

var s=“史密斯先生花了150万美元买下了cheapsite.com,也就是说,他为此付出了很多。他介意吗?小亚当·琼斯认为他不介意。无论如何,这都不是真的……好吧,可能性为0.9。”
变量rx=/((?:[A-Z][A-Z]\.\w\.\w[\w\w].[\w\w])*?[.!?])(?:\s+$)/g
var结果=[],m;
while(m=rx.exec){
结果:push(m[1]);
}

log(results)
好的,基于(非常感谢)给出的正则表达式,我可以这样做

const string=“我的完美字符串”
常量正则表达式=/(?:[A-Z][A-Z]\.\w\.\w.\w.\124;)*(?:[.!?].$)(?:\ s+$)/g
常量句子=string.match(正则表达式)
这将给出句子,但请注意,我需要删除数组中的一个元素,因为它返回空值

[
“史密斯先生花150万美元买下了cheapsite.com,也就是说,他为此付出了很多。”,
“他介意吗?”,
“小亚当·琼斯认为他没有。”,
“无论如何,这不是真的……”,
“好吧,概率为0.9,它不是。”,
''
]
然后,通过从数组中删除最后一个元素,我们可以得到预期的结果

句子.pop()
如果你需要删除句子末尾的空格,你可以删掉它们

让句子=string.match(regex.map)(句子=>{
返回句子trim()
})

这种方法只有一个问题。让我们说最后一句话“好吧,概率为.9,它不是.”最后没有“.”。该字符串不会添加到句子数组中。即使它的结尾不象其他句子那样正常,我如何添加它。@curiousDev然后使用
/((?:[A-Z][A-Z]\.\w\.\w.\w.*)*?(?:[!?].$)(?:\s+.$)/g
,请参阅。太棒了!但有一个问题。当我使用给定的正则表达式运行js脚本时,它崩溃了,占用了大量内存。我需要修改js脚本吗?@curiousDev抱歉,在js中,几乎没有空间来增强这些模式。您可能需要重新制定需求,然后我们可以考虑另一种模式。抱歉,这只是lookbehind断言不起作用。
(?<!\w\.\w.)(?<![A-Z][a-z]\.)(?<=\.|\?)\s
[
"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."
]