Javascript 仅当字符串不是属性值时才替换该字符串

Javascript 仅当字符串不是属性值时才替换该字符串,javascript,regex,Javascript,Regex,我需要替换JavaScript字符串中的price,但前提是它不是属性的值。结果应该如下所示: '<span title="$30,000,000.50">$30,000,000.50</span>' // original '<span title="$30,000,000.50">xxx</span>' // desired result 'bla bla bla $30,000,000.50 bla bla bla' // original

我需要替换JavaScript字符串中的price,但前提是它不是属性的值。结果应该如下所示:

'<span title="$30,000,000.50">$30,000,000.50</span>' // original
'<span title="$30,000,000.50">xxx</span>' // desired result

'bla bla bla $30,000,000.50 bla bla bla' // original
'bla bla bla xxx bla bla bla' // desired result
那很好。但是,当我试图排除这种模式用引号括起来的情况时,它开始表现得很滑稽:

'<span title="$30,000,000.50">$30,000,000.50</span>'.replace(/(?!=\")(\$[\d,.]+)(?!\")/gi, 'xxx');
// <span title="xxx0">xxx</span>
“$30000000.50”。替换(/(?!=\”)(\$[\d,.]+)(?!\”)/gi,“xxx”);
//xxx
请注意,它替换了title属性的值,但保留了最后一个零


你能纠正我的代码并告诉我我做错了什么吗?谢谢。

Javascript具有使用函数进行替换的强大功能,请使用它:

'<a title="$30">$30</a>'.replace(/\$[^<>]*?(<|$)/g,function($0){return $0.replace("$","")})

“$30”。替换(/\$[^]*?(为什么不简化标记标记并使其成为正则表达式的一部分

var str = '<span title="$30,000,000.50">$30,000,000.50</span>';
var newStr = str.replace(/>\$[\d,.]+</gi, '>xxx<');

//prints -> <span title="$30,000,000.50">xxx</span>
var str='$30000000.50';
var newStr=str.replace(/>\$[\d,.]+xxx

您需要一个消极的向前看和一个消极的向后看。不幸的是,JavaScript不支持向后看。但是,使用以下技术:您可以模拟这种行为

str.replace(/(\")?(\$[\d,.]+)(?!\")/gi, function ($0, $1) {
    return $1 ? $0 : 'xxx';
});

你确定使用实际代码不会更简单、更易读吗?+1-这是我的想法,但无法解决。不幸的是,只有当价格在标签内时,这才有效。在这样的情况下,它不会起作用:“bla-bla-bla$30000000.50 bla-bla-bla”很抱歉,我没有在原来的帖子中提到它。我已经更新了它,让它更清楚。
str.replace(/(\")?(\$[\d,.]+)(?!\")/gi, function ($0, $1) {
    return $1 ? $0 : 'xxx';
});