【问题标题】:JavaScript Regex finding all substrings matching the starting and ending patternJavaScript 正则表达式查找与开始和结束模式匹配的所有子字符串
【发布时间】:2014-12-11 14:16:26
【问题描述】:

我想要一个 Javascript 正则表达式,它在给定的字符串中查找所有以特定字符开头并以特定字符结尾的子字符串。 返回的子字符串集可以是一个数组。 例如 字符串:

Body<input value="CourseName" class="emailButtonSnip" type="button"><input value="CourseDescription" class="emailButtonSnip" type="button"><input value="CourseEnrollmentDeadline" class="emailButtonSnip" type="button">"

起始字符 = "&lt;input" 结束字符 = "&gt;"

输出:

<input value="CourseName" class="emailButtonSnip" type="button">
<input value="CourseDescription" class="emailButtonSnip" type="button">
<input value="CourseEnrollmentDeadline" class="emailButtonSnip" type="button">

【问题讨论】:

  • 你不想要一个你想要的正则表达式 document.querySelector(),如果你迫切需要正则表达式,试试 new RegExp("/"+"start_pattern"+"([^"+end_pattern+ end_pattern+"]+)/g"),但你也不想这样做,因为你不知道 someinput 是否是 \\s 那么它就变成了一个正则表达式特殊字符。所以这是个坏主意

标签: javascript html regex string


【解决方案1】:

你可以像这样使用正则表达式:

var string = 'Body<input value="CourseName" class="emailButtonSnip" type="button"><input value="CourseDescription" class="emailButtonSnip" type="button"><input value="CourseEnrollmentDeadline" class="emailButtonSnip" type="button">';

var re = /\<input.*?\>/ig
var match;
while ((match = re.exec(string)) != null){
  console.log(match[0]);
}

生产:

<input value="CourseName" class="emailButtonSnip" type="button">
<input value="CourseDescription" class="emailButtonSnip" type="button">
<input value="CourseEnrollmentDeadline" class="emailButtonSnip" type="button">

但是,正如 cmets 中所指出的,这可能不是最好的主意。

编辑(根据您在 cmets 中的要求):

var string = 'Body<input value="CourseName" class="emailButtonSnip" type="button"><input value="CourseDescription" class="emailButtonSnip" type="button"><input value="CourseEnrollmentDeadline" class="emailButtonSnip" type="button">';

var re = /\<input.*?\>/ig
var match;
while ((match = re.exec(string)) != null){
  var input = match[0],
      re1 = /value="(.*?)"/ig;
  console.log(re1.exec(input)[1]);
}

生产:

CourseName
CourseDescription
CourseEnrollmentDeadline

您当然可以直接匹配原始字符串中的值,但由于我不知道您要做什么,所以我会这样。

【讨论】:

  • 谢谢杰克,这正是我所需要的。
  • 您能帮忙从每个子字符串中获取值吗?例如,第一个输出是 CourseName,第二个输出是 CourseDescription,第三个输出是 CourseEnrollmentDeadline
  • 您为什么要使用正则表达式来执行此操作?这是非常混乱的。为什么不document.querySelector()
  • 实际上我没有从 html 访问此内容,我已经将此字符串作为元素的值。我的用例是解析这个字符串并用它们的值替换输入的 div。
  • 非常感谢杰克。非常感谢您的帮助。
【解决方案2】:
<[^>]+>

你可以试试这个。查看演示。

https://regex101.com/r/eZ0yP4/11

【讨论】:

  • 这太棒了??。但如果有一点解释会更喜欢。
  • @JPS 上面的链接中有解释。如果您需要更多信息,请告诉我
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-15
  • 2017-09-06
  • 1970-01-01
  • 2014-09-15
相关资源
最近更新 更多