我正在努力使用正则表达式。我想我了解个人的表达方式,但将某些内容组合在一起完全使我感到困惑。我不了解如何使用与AND运算符等效的东西来将我想要的片段连接成一个“完整”的匹配表达式。
例如,我想将一个字符串拆分为一个数组,以中断<1>to<57>和</1>to的任何值</57>。
所以,我以为我需要这样的东西:
( '<' or '<\/' ) and ( [1-9] or [1-4][0-9] or [5][0-7] ) and '>'
我可以单独使用<[1-4] [0-9]>或</ [1-4] [0-9]>,但是当与'|'一起使用时 它返回部分匹配项或在完全匹配项之间未定义。
你能告诉我我不明白的事吗?附件是我的例子。
如果对第一个表达式单击“尝试”,它将在每个<21>或之后产生空值</21>。测试时,它在console.log中打印为未定义。第二个表达式在每个标签之后产生<和</。我不明白这一点,更不用说如何在此问题的前面将更完整的表达式转换为regExp了。
所需的输出是:
'This is a', '<21>', 'test', '<\/21>', '.'
谢谢你。
补充 在收到Georg对这个问题的回答后,我开始对转义这些标签的方法感兴趣,特别是因为当前仅在Chrome中不支持负向回溯。通过这种方式,我的意思是\<21>将被视为常规文本,并且此时不会生成字符串拆分。如果你有兴趣在类似的东西,你可能会找到答案由雷沃提供我的后续问题在这里非常有用。
let b, B = document.querySelectorAll('button');
for ( b of B ) b.addEventListener( 'click', split_str, false );
function split_str( evt )
{
let e = evt.currentTarget,
r = new RegExp( e.previousElementSibling.value ),
s = e.parentNode.previousElementSibling.value;
e.parentNode.lastElementChild.textContent = s.split(r);
}
div > div { border: 1px solid rgb(150,150,150); width: 500px; height: 200px;padding: 5px; }
input { border: 1px solid rgb(150,150,150); width: 500px; margin-bottom: 20px; padding:5px; }
<input type='text' value="This is a<21>test</21>.">
<div>
<input type='text' value="(<[1-4][0-9]>)|(<\/[1-4][0-9]>)"> <button>try</button>
<input type='text' value="((<|<\/)[1-4][0-9]>)"> <button>try</button>
<div></div>
</div>
慕田峪7331174
慕田峪4524236
相关分类