Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/376.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何更正if语句的JavaScript/jQuery前瞻正则表达式?_Javascript_Jquery_Regex - Fatal编程技术网

如何更正if语句的JavaScript/jQuery前瞻正则表达式?

如何更正if语句的JavaScript/jQuery前瞻正则表达式?,javascript,jquery,regex,Javascript,Jquery,Regex,我正在编写一个JavaScript/jQuery函数,当它在一行末尾检测到句点“.”或右括号“)”时,会插入一个换行符。我决定我可以用正则表达式来做这个,但我被卡住了。起初,函数遇到任何一个字符时都会插入一个中断符,这几乎是我想要的,因此我添加了一个if语句来进一步控制函数。 如果句号后面跟一个括号,那么它应该在右括号后面而不是句号后面断开。但是,我需要为这个if语句指定第二个正则表达式,这正是我遇到的问题 如果后面没有空格和开括号(“),如何编写与句点“.”匹配的负前瞻正则表达式 下面的函数是

我正在编写一个JavaScript/jQuery函数,当它在一行末尾检测到句点“.”或右括号“)”时,会插入一个换行符。我决定我可以用正则表达式来做这个,但我被卡住了。起初,函数遇到任何一个字符时都会插入一个中断符,这几乎是我想要的,因此我添加了一个if语句来进一步控制函数。
如果句号后面跟一个括号,那么它应该在右括号后面而不是句号后面断开。但是,我需要为这个if语句指定第二个正则表达式,这正是我遇到的问题

如果后面没有空格和开括号(“),如何编写与句点“.”匹配的负前瞻正则表达式

下面的函数是我目前拥有的:
我在控制台的if语句上得到一个“Invalid regular expression”错误,/\.\.\(\).(?!()/g.
它还说有一个“未终止的组”,但我不确定在我的表达中是什么

$(‘.classItem’).each(function(i) {
    var oldString = $(this).html();

    if( /\.\(\).(?!()/g.test(oldString) == true ) //<— If the string has a period that is not followed by a space and an open parenthesis
    {
        newString = oldString.replace(/(\.\s+)/g, "$1 <br>");  //<— Then break at the period if true.
        $(‘.classItem’).html(newString);
    }
    else
    {
        newString = oldString.replace(/(\)\s+)/g, "$1 <br>");  //<— Then break at the close parenthesis if false.
        $(‘.classItem’).html(newString);
    }
});
$('.classItem')。每个(函数(i){
var oldString=$(this.html();

如果(/\.\(\)(?!()/g.test(oldString)==true)//您在RegExp中遗漏了反斜杠:

/\.\(\).(?!()/g
更正它:

/\.\(\).(?!\()/g
$('.classItem')。每个(函数(i){
var oldString=$(this.html();

如果(/\。\(\)(?!\()/g.test(oldString)==true)//通过使用regexr.com和更多的研究,我最终得到了一个更好地回答我问题的regex。我发现在一个表达式中使用多个负前瞻组是可能的。这给了我更多的自由,使我在整体表达式中更精确,而不是希望我能在一个表达式中抓住所有逻辑嗯

最能回答我问题的正则表达式是:
/\.(?!\()(?!\s\()/g

请看这里:

第一个负前瞻
(?!\()
)在句点后面没有右括号时匹配。此组消除了匹配第二组自己无法捕获的。
第二个负前瞻
(?!\s\()
)在句点后面没有空格字符和右括号时匹配。
当一起使用时,这使得正则表达式更加具体,并允许它跳过诸如:.()、.()和
.\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu


(?!\s\()
,源于
/\(?![\s(])/g
,Wiktor Stribiżew在中给出的答案)

匹配句点“,”当后面没有空格和开括号“(?![\s(])/g
。它有帮助吗?是的,它确实有帮助,并且回答了我的具体问题。谢谢。你为什么接受下面的答案?它似乎做了一些不同的事情。我尝试了你和其他用户的正则表达式,并且都在我的函数中工作,对我来说没有明显的差异。我接受了,因为我的问题大部分都得到了回答。如果有有些不一样的地方,那么也许我把正则表达式写错了,我看不出来。你能澄清一下它有什么不同吗?我的函数实际上仍然不能完全按照我想要的那样工作,但我认为应该怪我的if语句,我应该把它保存在另一篇文章中。
\.(\)(?!\()
匹配
()
然后是除换行字符以外的任何字符,后面不跟
)。我的建议符合您的要求:句点“.”如果后面不跟空格和开括号“(”,注意:如果后面紧跟空格或
lookahead中是否需要再次转义开括号,即使我已经转义过一次?