我目前正在寻找一种将匹配文本转换为粗体html行的方法。我有部分工作,除了特殊字符给我问题,因为我希望保持原始字符串,但不比较原始字符串。
示例:
给出原始字符串:
Taco John's is my favorite place to eat.
想要匹配:
is my 'favorite'
获得所需的结果:
Taco John's <b>is my favorite</b> place to eat.
我目前绕过匹配字符串中的额外引号的方法是替换它们
let regex = new RegExp('('+escapeRegexCharacters(matching_text.replace(/[^a-z 0-9]/gi,''))+')',"gi")
let html= full_text.replace(/[^a-z 0-9]/gi,'').replace(regex, "<b>$1</b>")}}></span>
除了丢失所有标点符号外,这几乎有效:
Taco Johns <b>is my favorite</b> place to eat
有没有办法使用正则表达式或其他方法添加围绕匹配短语的标签,同时在匹配过程中忽略大小写和特殊字符?
更新#1:
似乎我不清楚。我需要原始字符串的puncuation保留在最终结果的html中。我需要匹配的文本逻辑来忽略所有特殊字符和大小写。因此,is my favorite
is My favorite
和is my 'favorite'
都应该触发匹配。
答案 0 :(得分:1)
在有模式的情况下,正则表达式很有用,但是,在这种情况下,您有直接匹配,因此,好的方法是使用String.prototype.replace
:
function wrap(source, part, tagName) {
return source
.replace(part,
`<${tagName}>${part}</${tagName}>`
)
;
}
至少,如果有模式,你应该编辑你的问题并提供它。
答案 1 :(得分:1)
不是从被搜索的字符串中删除特殊字符,而是可以在正则表达式中插入每个字符匹配之间的模式,该模式将跳过可能发生的任何特殊字符。这样你就可以构建一个可以直接应用于被搜索字符串的正则表达式,因此替换操作不会触及匹配之外的特殊字符:
let escapeRegexCharacters =
s => s.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&"),
full_text = "Taco John's is My favorite place to eat.";
matching_text = "is my 'favorite'";
regex = new RegExp(matching_text.replace(/[^a-z\s\d]/gi, '')
.split().map(escapeRegexCharacters).join('[^a-z\s\d]*'), "gi"),
html = full_text.replace(regex, "<b>$&</b>");
console.log(html);
答案 2 :(得分:0)
答案 3 :(得分:0)
概括,您可以使用is my /w+
的正则表达式。您可以在替换器函数中使用它,以便您可以javascript操作结果文本:
var str = "Taco John's is my favorite place to eat.";
var html = str.replace(/is my \w*/, function (x) {
return "<b>" + x + "</b>";
} );
console.log(html);
答案 4 :(得分:0)
作为一个选项,对于单次出现的情况 - 使用 String.split
将 '###' 替换为 '@@@' 的示例:
let inputString = '1234###5678'
const chunks = inputString.split('###')
inputString = `${chunks[0]}@@@${chunks[1]}`