【问题标题】:RegEx to match only a newline character with given conditions?正则表达式仅匹配具有给定条件的换行符?
【发布时间】:2011-02-07 22:47:07
【问题描述】:

我有以下正则表达式:

^(?!#)(?<=.+)$\r

(设置了全局和多行标志)

想要做的是在换行符结束不以'#'开头的行时匹配。

【问题讨论】:

  • 所以你不想在\r\r之后之后得到美元吗?
  • @ELR:为了确定,我删除了$,但它仍然不起作用。在使用多行和$ 时,\r 可能甚至不应该存在。
  • 而且 Javascript 正则表达式不支持向后看 :(
  • 是的,我认为在多行模式下,$ 匹配换行符,但它的长度为零。是否要替换换行符?
  • 我很想在换行符上使用.split,遍历数组并为不以# 开头的任何内容添加换行符,然后是.join

标签: javascript regex newline


【解决方案1】:
function doSplit(input){
   var newl=String.fromCharCode(13)+String.fromCharCode(10); //make a newline
   var str = sInput.value.split(/\n/);                       //split on newlines
    for (var i=0,iMax=str.length; i<iMax; i++){              //loop through  
         //if it starts # add a newline
        if (str[i][0]=='#') {str[i]+=newl;}                 
    };

   return str.join('');   //join it back up
}

Example here

当然,这实际上会在末尾添加一个不存在的换行符(如果最后一行以 # 开头),因此请更改循环以避免这种情况,例如...

for (var i=0,iMax=str.length-1; i<iMax; i++){              //loop through

【讨论】:

  • 我很想看看这个函数的执行时间与正则表达式解决方案的比较......
【解决方案2】:

零宽度前瞻断言关注“不以开头”,但我认为您混淆了 ^ 和 $ 的使用(在多行模式下)

你可能想要类似的东西

(^|\n)(?!#)(\n)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-22
    • 2014-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多