将每个单词替换为标签

Replace every word with tag

本文关键字:标签 替换 单词      更新时间:2023-09-26

需要JAVASCRIPT或JAVA解决方案

我正在寻找的解决方案可以使用java或javascript。我将 html 代码放在一个字符串中,因此我可以在将其与 java 一起使用之前或之后与 javascript 一起使用之前对其进行操作。

问题

无论如何,我必须用标签包装每个单词。例如:

<html> ... >
Hello every one, cheers
< ... </html>

应改为

<html> ... >
<word>Hello</word> <word>every</word> <word>one</word>, <word>cheers</word>
< ... </html>

为什么?

这将帮助我使用javascript来选择/突出显示一个单词。似乎唯一的方法是使用我在 JAVASCRIPT 提示中添加的函数 highlightElementAtPoint:它只是找到某个 x,y 坐标的元素并突出显示它。我想,如果每个词都是一个元素,那将是可行的。

我们的想法是使用这种方法来允许我们在 android WebView 中检测突出显示的文本,即使这意味着使用扭曲的突出显示方法。多想一想,您会发现许多其他应用程序。


JAVASCRIPT 提示

我使用以下代码突出显示一个单词;但是,这将突出显示属于某个标签的整个文本。当每个单词都是一个标签时,这将在某种程度上起作用。如果有替代品可以让我在某个位置突出显示一个,那也将是一个解决方案。

function highlightElementAtPoint(xOrdinate, yOrdinate) {
    var theElement = document.elementFromPoint(xOrdinate, yOrdinate);
    selectedElement = theElement;
    theElement.style.backgroundColor = "yellow";
    var theName = theElement.nodeName;
    var theArray = document.getElementsByTagName(theName);
    var theIndex = -1;
    for (i = 0; i < theArray.length; i++) {
        if (theArray[i] == theElement) {
            theIndex = i;
        }
    }
    window.androidselection.selected(theElement.innerHTML);
    return theName + " " + theIndex;
}

尝试使用类似的东西

String yourStringHere = yourStringHere.replace(" ", "</word> <word>" )
yourStringHere.replace("<html></word>", "<html>" );//remove first closing word-tag

应该工作,也许你必须改变...

var tags = document.body.innerText.match(/'w+/g);
for(var i=0;i<tags.length;i++){
    tags[i] = '<word>' + tags[i] + '</word>';
}

或者正如@ThomasK所说:

var tags = document.body.innerText;
tags = '<word>' + tags + '</word>';
tags = tags.replace(/'s/g,'</word><word>');

但你必须记住:.replace(" ",foo)只替换一次空间。对于多个替换,您必须使用.replace(/'s+/g,foo)

正如@ajax333221所说,第二种方式将包括逗号、点和其他符号,因此更好的解决方案是第一种

JSFiddle 示例:http://jsfiddle.net/c6ftq/4/

inputStr = inputStr.replaceAll("(?<!</?)''w++(?!''s*>)","<word>$0</word>");

你可以尝试以下代码,

import java.util.StringTokenizer;

public class myTag 
{
    static String startWordTag = "<Word>";
    static String endWordTag = "</Word>";
    static String space = " ";
    static String myText = "Hello how are you ";
    public static void main ( String args[] )
    {
        StringTokenizer st = new StringTokenizer (myText," ");
        StringBuffer sb = new StringBuffer();
        while ( st.hasMoreTokens() )
        {
            sb.append(startWordTag); 
            sb.append(st.nextToken());
            sb.append(endWordTag);
            sb.append(space);
        }
        System.out.println ( "Result:" + sb.toString() );
    }
}