【问题标题】:Regular Expression match only one time in text editor?正则表达式在文本编辑器中只匹配一次?
【发布时间】:2018-01-31 16:27:42
【问题描述】:

使用文本编辑器summernote,我尝试匹配以{{ 开头、可选white spaceany character、可选white space 并以}} 结尾的每个字符。

因此,我得到了这样的正则表达式模式:

var regex1 = /^\{\{\s*?\w+\s*?\}\}$/g;

这将匹配:{{matched}}{{ matched }}

$('.wysiwyg').summernote({
  callbacks: {
    onChange: function(contents, $editable) {
      // remove html tag
      contents = contents.replace(/<\/?[^>]+(>|$)/g, "");
      console.log('contens: ' + contents);

      var regex = /^\{\{\s*?\w+\s*?\}\}$/g;
      // update to local storage
      if (regex.test(contents)) {
        console.log('regex1 matched');
      }

    }


  }
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script>
<link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet" integrity="sha384-wvfXpqpZZVQGK6TAh5PVlGOfQNHSoD2xbE+QkPxCAFlNEevoEH3Sl0sibVcOQVnN" crossorigin="anonymous">

<script src="https://cdnjs.cloudflare.com/ajax/libs/summernote/0.8.9/summernote.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/summernote/0.8.9/summernote.js"></script>

<div class="container">

  <div class="row">
    <form class="col-lg-12" id="postForm" action="/summernote.php" method="POST" enctype="multipart/form-data">
      <fieldset>
        <legend>Summernote test</legend>
        <p class="container">
          <textarea class="input-block-level wysiwyg" id="summernote" name="content" rows="18">
					</textarea>
        </p>
      </fieldset>
    </form>
  </div>
</div>

但是,它仅在单词的开头类似于{{matched}} 时才匹配,并且随着内容的增长,在第一个匹配之后的另一个后续匹配(例如{{another_matched}})不再匹配。简单地说,只有当内容以匹配的模式开头时,它才匹配一次,例如。 {{matched}}.

我怎样才能让它匹配单词{{matched}}{{another_matched}} 匹配的次数?谢谢。

【问题讨论】:

  • 如果我明白你想说什么,那么你只需要用()+包装你的整个正则表达式
  • @GalAbra,你能提供一个例子吗?谢谢。
  • @GalAbra,谢谢。然而,就像在文本编辑器中一样,匹配的模式并不总是彼此相邻,它们可以由某个单词、空格、任何标点符号或换行符分隔,或者在某个单词之后开始。例如,这里开始 {{first_matched}}{{second_matched}}

标签: javascript regex


【解决方案1】:

目前,您的正则表达式仅匹配 完全 匹配模式的字符串,即整个字符串必须匹配。

这是因为您在正则表达式的开头和结尾添加了^$。这些是字符串开头和结尾的锚点。它断言字符串应该以您需要的模式开头,也应该以所需的模式结束,所以这样的东西不会匹配:

Hello {{match}} Bye

只需删除^$,它就会在整个字符串中搜索该模式。

regex = /\{\{\s*?\w+\s*?\}\}/g;
regex.test('{{matched}} something {{matched}}') // true

【讨论】:

  • 非常感谢你拯救了我的一天 :)
猜你喜欢
  • 2015-04-27
  • 1970-01-01
  • 2012-02-04
  • 2021-09-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多