将规则应用于文本但不在div或元素内

时间:2013-02-28 11:08:21

标签: javascript jquery html regex str-replace

因此我基本上想要在textarea的包含html中使用特定标记(仅使用javascript)而不触及其余内容,例如:

<textarea>    
    some stuff here
    random new line

    <i>this can be treated as
    per other text and manipulated</i>

    <b>
    BUT something 
    in bold 
    should be ignored / overlooked</b>

    and some
    other stuff,
    right here

</textarea>

假设我想要替换此textarea中的所有新行\n(使用<br/>),但想要忽略<b>中的文本(而只是<b> }标签,而不仅仅是任何HTML标签),我该怎么做?

我在想某种正则表达式可以工作,但不确定如何将规则放在一起......虽然通过正则表达式解析html并不理想 - 如果它有效,那么它就解决了我的问题。我还认为.text().html()之间的某种jquery杂耍可能会与某些:not().filter()一起使用,但是我仍然坚持到哪里开始......

非常感谢

1 个答案:

答案 0 :(得分:2)

我并不是说这是正确的或最好的方法,但这里有一个正则表达式可以满足你的需要。

以下内容会将所有\n替换为<br/>,前提是在字符串中</b>未出现在<b>之前 - 这将阻止<b></b>内的任何替换{1}}。

text = text.replace( /\n(?!((?!<b>)[\s\S])*<\/b>)/g , '<br/>' );

实施例

$('textarea').val( function ( index, old ) {
    return old.replace( /\n(?!((?!<b>)[\s\S])*<\/b>)/g , '<br/>' );
});