正则表达式在在线测试中匹配但在javascript执行中不匹配?

时间:2017-07-08 01:51:40

标签: javascript regex

我的正则表达式应该找到并删除所有以foo-开头的单词。正则表达式适用于在线正则表达式http://regexr.com/3gafi但在我的javascript中失败。

出了什么问题?

$('[class*="foo-"]').each(function(index, ele) {

	ele.className = ele.className.replace(/(foo-.*( |\0))/g, '');
  console.log(ele.className);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="foo-abc img-responsive"></div>

<div class="foo-abc"></div>

<div class=" foo-abc"></div>

<div class=" foo-abc "></div>

3 个答案:

答案 0 :(得分:1)

(\bfoo-.*?(?= |$)有效。你要确保它只删除以foo开头的单词而不删除任何其他单词。前瞻有助于此。

&#13;
&#13;
$('[class*="foo-"]').each(function(index, ele) {

	ele.className = ele.className.replace(/(\bfoo-.*?(?= |$))/g, '');
  console.log(ele.className);
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="foo-abc img-responsive"></div>

<div class="foo-abc"></div>

<div class=" foo-abc"></div>

<div class=" foo-abc "></div>
&#13;
&#13;
&#13;

我以为你想保留img-responsive。如果没有,请删除前瞻,并将非贪婪的匹配转换为贪婪的匹配(使用*)。

答案 1 :(得分:0)

$('[class*="foo-"]').each(function(index, ele) {

	ele.className = ele.className.replace(/(foo-.*( |\0)?)/g, '');
  console.log(ele.className);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="foo-abc img-responsive"></div>

<div class="foo-abc"></div>

<div class=" foo-abc"></div>

<div class=" foo-abc "></div>

希望它有所帮助。

答案 2 :(得分:0)

示例中的正则表达式不适用于替换。请尝试使用以下内容 - /(foo-[^ "]+ ?)/g